シェルスクリプトで grep と if ステートメントを使用する

シェルスクリプトで grep と if ステートメントを使用する

ファイル内の文字列を検索したいのですが、この Web サイトでいろいろ調べた結果、grepinifステートメントを使用することに決めました。しかし、他の関連投稿で見つけた指示をすべて実行したにもかかわらず、期待どおりに動作しません。これが私のコードです。

echo "Enter dicounter number"
read string1
echo "Enter side with LEDs"
read string2

if grep -q "dicounter_$string1_from_$string2" MasterFile.txt; then
   echo "dicounter_$string1_from$string2 already exists in MasterFile."
else
   { (a bunch of stuff to make the transmitter operate) }
fi

私が考える主な問題は、コマンドライン引数の読み取り方法にあります。

答え1

スクリプトが期待通りに動作しない場合は、まずset -xコード内の問題箇所の前に(この場合は の前grep)を追加してスクリプトを実行することを試してください。すると、スクリプトがどのような動作をするかがわかります。実はそうすれば、あなたが何をしているかと比較することができます期待するそれをやっている。

あなたの場合、問題は_が変数名に有効な文字であるため、期待どおり$string1_from_ではなくの値を使用しようとしていることにある$string1可能性があります。このため、複雑な操作を使用しない場合でも、変数名を中括弧で囲むことをお勧めします。例:

if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then
   echo "dicounter_${string1}_from${string2} already exists in MasterFile."
else
   [..]

関連情報