私はbashスクリプトの初心者で、次のような問題があります: findやgrepとオプションのパラメータで特定の文字列を含むファイルを検索できる検索スクリプトを作成しようとしています。すべての場合に条件に合致しない*文字が最後の問題で詰まっています。bashで* = '*'を作る方法は?
私のスクリプトに3つのパラメータがあります(必須)
- string_to_searchが
例:
./search_text.sh 'string_to_search' 'file_name_pattern' /path
私はしたいトン以下:ファイル名パターンは*よりも何か他のものであるか、 '*' => + grepする
- ファイル名パターンを指定するか(または引用符なし)*であるされていない場合=>
- を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