ファイルの最初の行を読み取り、シェルファイル内の文字列と比較する

ファイルの最初の行を読み取り、シェルファイル内の文字列と比較する

ファイルの最初の行を読み取ってテキストと一致させる必要があります。テキストが一致した場合は、特定の操作を実行する必要があります。

問題は、コマンドが変数と文字列を比較できない場合に発生します。

file_content=$(head -1 ${file_name})
echo $file_content
if [[ $file_content = 'No new data' ]]; then
    echo "Should come here"
fi
echo $file_content
if [ "${file_content}" = "No new data" ]; then
  echo "Should come here"
fi

if ブロックが機能していません。1 行目でキャプチャしている値に問題があると思います。

答え1

おそらく最初の行には、印刷できない文字、先頭または末尾の空白、またはスペース以外の空白文字が含まれています ( に渡すときに変数を引用符で囲むのを忘れましたecho)。最初にクリーンアップすることもできます。

content=$(
  sed '
    s/[[:space:]]\{1,\}/ /g; # turn sequences of spacing characters into one SPC
    s/[^[:print:]]//g; # remove non-printable characters
    s/^ //; s/ $//; # remove leading and trailing space
    q; # quit after first line' < "$file_name"
)

if [ "$content" = 'No new data' ]; then
  echo OK
fi

関連情報