2012-09-13 111 views
0

我想知道是否有任何方法在bash中使用'find'命令进行测试。换句话说,我该如何去做一个条件语句来测试文件是否是用'find'找到的呢?Bash-使用'find'命令进行测试

要详细说明我的意思,我已经包含了下面的代码。其目的应:

  1. 找到用户
  2. 输入的目录中查找该目录中的文件,文件名由用户
  3. 输入查找该文件中的一句话,这也是由用户
  4. 输入
#!/bin/bash 
#Task9.sh 
cd/
echo "please enter a directory" 
read direc 
path= find home -depth -name "$direc" 
if [ -z $path ]; then 
    echo "not a valid directory" 
    exit 1 
else 
    cd $path 
    counter=3 
    while [ $counter -gt 0 ]; do 
     echo "enter a filename" 
     read FileName 
     FilePath= find $direc -depth -name "$FileName" 
     if [ -z $FilePath ]; then 
      break 
     else 
       let counter-- 
    fi 
    done 
if [ -z $FilePath ]; then 
      cd $FilePath   
      echo "input a word" 
      read SearchWord 
      echo "Found!" 
      grep $SearchWord $FileName 

    else 
      echo "No such file" 
      exit 2 
    fi 
fi 

exit 0 

我对Bash非常陌生,所以我对任何容易犯的错误表示歉意。我不习惯解析语言。感谢任何帮助我的人,不胜感激

+0

你需要使用'find'命令吗?你需要使用-z操作符吗?或者你可以使用其他命令和操作符? –

+0

我可以使用其他运算符,我只是一般不知道如何测试目录中文件的不存在。 –

+0

你的分配是错误的,在等号后面不能有空格,等号后面的内容将是一个文字字符串,显然你需要命令替换。 'path ='将变量设置为空字符串,'path = foo bar'运行命令'bar','path'临时设置为'foo';通常,你引用一个字面值,'path ='foo bar'或'path ='foo bar'“,但是这里你需要命令替换:'path = $(foo bar)'或旧式'path = \' foo bar \''运行'foo bar'命令并在'path'中捕获它的输出。 – tripleee

回答

1

您正在使用find命令加上shell的-z $foo运算符来确定用户是否指定了现有文件的路径。如果文件存在或不存在,使用基于文件的操作符可能会直接询问bash,而不是运行不必要的命令,然后对结果使用基于字符串的运算符(提示:存在)。一些本网页上的链接可能会帮助您:

http://tldp.org/LDP/abs/html/tests.html

好运!