bashスクリプト - 構文の助けが必要です

bashスクリプト - 構文の助けが必要です

4つの異なるファイルの最後の行を読み、特定の文字列を探しています。その文字列に基づいてソースファイルの名前を変更する必要があります。 4つのファイルはすべてgrep文字列と最終的な宛先名が異なります。

if tail -n1 $f | grep $string -e $string; then cp $f to file.new
else tail -n1 $f |grep $sting2 -e $string2; then cp $f to file2.new

ベストアンサー1

  1. すべての変数置換を引用する必要があります。そうしないと、値の空白やその他のシェル魔法文字がそれを別々のパラメータに分割したり、望ましくない効果をもたらしたりします。
  2. grepには、2番目の文字列の前ではなく、各検索文字列の前に「-e」が必要です。文字列は同じように見えるので、もちろん1つは省略できます。
  3. コメントで述べたように、「cp」から「to」を削除します。
  4. $ string2の最初のエントリにタイプミス(rがありません)があります。コピーして貼り付けると、元のコードに同じタイプミスがある可能性があります。
    if tail -n1 "$f" | grep -e "$string"; then cp "$f" file.new
    else tail -n1 "$f" |grep -e "$string2"; then cp "$f" file2.new
    else ...  string3    file3
    else ...  string4    file4
    fi

おすすめ記事