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