2012-09-13 152 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

好運!