発生回数を計算するために使用されるスクリプトのバグ

発生回数を計算するために使用されるスクリプトのバグ
#!/bin/sh
count=1
while read line
do
  found=$( grep M $line )
  if [ "$found" ]; then
    echo $count")" $line >> filesave.txt
  fi
  count=$((count+1))
done < log1.txt

しかし、次のエラーが発生しました。

./count.sh ./count.sh: syntax error at line 10: `found=$' unexpected

答え1

問題は引用されていない変数$line参照です。

found=$( grep M $line )

そして/または

echo $count")" $line >> filesave.txt`

どちらの場合も$line二重引用符で囲む必要があります。

found=$( grep M "$line" )
echo $count")" "$line" >> filesave.txt`

この例では、次の行をlog1.txtファイル名として使用しますが、これはおそらくユーザーが望むものではありません。読み取ったすべての行からlog.txt文字列を取得するには、M次のコマンドを使用できます。

found="$( echo "$line" | grep M )"

以降は文字が含まれている場合にのみ同じです$found$line$lineM

関連情報