if-elseステートメントでgrepを使用する[終了]


10

入力した文字列がファイルにない場合、コードが出力されないのはなぜですか。文字列を入力してもファイルにない場合は、応答がなく、最初に戻ります。誰かが私のコードの何が悪いのか教えてもらえますか?

while :
do
echo "Please enter a string"
read input_string
echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
read input_string1
if grep -q $input_string $input_string1 ; then
echo  "Your string has been found"
fi
done

3
何が起こると思いますか?
Patrick

入力した文字列がファイル内で検索され、その文字列が存在するかどうかを示すことを意味していました。他のコードを入力する必要があることに気づきました。ありがとう
Adam Poyser 2014

input_stringところで、実際には話せる変数名ではありません:)
Marian

回答:


10
while :
 do
     echo "Please enter a string"
     read input_string
     echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
     read input_string1
     grep -q "${input_string}" "${input_string1}"                                                                 
     if [ $? -eq 0 ] ; then
         echo  "Your string has been found"
     else 
         echo "Your string has not been found"
     fi
 done

1
私はこのコードを試したところ、うまくいきました!私のすべての問題が、elseステートメントがないことだとは思いませんでした。迅速な対応に感謝
Adam Poyser 14

2
grepパラメータを引用する必要があります。検索文字列にが含まれている場合-v、またはファイル名にスペースが含まれている場合はどうなるか考えてください。
アンヘル

0

あなたはあなたの行方不明のelse-branchを理解しました、しかし1つの提案:

1 が続かないようにするために、$input_string $input_string1try を使用する代わりに${input_string} ${input_string1}$input_string


いいえ、提案された代替品は元のものとまったく同じです。$input_string1変数の値ですinput_string1(引用符で囲まれていないため、スプリットおよびグロブ)、変数は関係しませんinput_string
Gilles 'SO-邪悪なことをやめなさい'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.