我是bash腳本中的新手,並且存在以下問題: 我試圖製作一個搜索腳本,讓我搜索包含find和/或grep和可選參數的特定字符串的文件,而且我卡住最後一個問題,在所有情況下,*字符與條件不匹配。如何在bash中使* ='*'?
有3個參數,以我的腳本:
- string_to_search(必需)
- file_name_pattern(可選)
- 路徑(可選)
實施例:
./search_text.sh 'string_to_search' 'file_name_pattern' /path
我想要ge T中的以下內容:
- 如果未指定file_name_pattern或*(帶或不帶引號)=> grep的
- 如果file_name_pattern什麼事情比別的*或 '*'=>找到+用grep
這裏是我的代碼:
#!/bin/bash
# ------------------------------------
# Set default values for optional parameters (tests)
if [ ! -z $2 ]
then
FILE_TYPE=$2
echo 'FILE_TYPE : var 2'
else
FILE_TYPE="*"
echo 'FILE_TYPE : *'
fi
if [ ! -z $3 ]
then
LOCATION=$3
echo 'LOCATION : var 3'
else
LOCATION=.
echo 'LOCATION : .'
fi
# ------------------------------------
# Do search/show conditions
if [ "$FILE_TYPE" == \* ];
then
#grep -rn -C 0 --color=always "$1" $LOCATION | less -R;
echo ' => GREP';
else
#find $LOCATION -iname $FILE_TYPE | sort | xargs grep "$1" --color=always -n 2>/dev/null | less -R;
echo '=> FIND';
fi
只要運行該代碼在年底進行測試,以顯示2個回聲。
現在我的問題是:
./search_text.sh 'string_to_search' '*.php' /path => works (FIND)
./search_text.sh 'string_to_search' '*' /path => works (GREP)
./search_text.sh 'string_to_search' '*' => works (GREP)
./search_text.sh 'string_to_search' * => ERROR => goes to FIND INSTEAD OF GREP :-(
./search_text.sh 'string_to_search' => works (GREP)
換句話說,我怎麼能寫出下列條件:
if [ "$FILE_TYPE" == \* ];
使*應被路過的時候認爲是同爲「*」這些值作爲命令行中的參數?
即使使用\ *轉義*,當我們僅將*不帶引號傳遞給腳本時,條件不匹配。
換句話說,我想使*被視爲像任何其他命令正常的通配符,所以* =「*」
任何幫助,非常感謝!
感謝Attila和Sorpigal ;-)好吧,我認爲有一種簡單的方法來逃避* char並將其當作一個字符串處理,但是我會將它用於引號,再次感謝您的幫助 – user1186503 2012-04-05 21:43:23