シェルスクリプトで「integer expression expected」のエラー

昔作ったシェルスクリプトで久しぶりに実行してみたら、下記のように「integer expression expected」とエラーが上がって処理ができていませんでした

sh test.sh: line 6: [: hoge: integer expression expected

エラーが上がったシェルスクリプトですが、以下のようにif文である値の比較をしています

#VAR1=`wc -c test1.txt | awk '{print $1}'`
#VAR2=`wc -c test2.txt | awk '{print $1}'`
VAR1=`md5sum test1.txt`
VAR2=`md5sum test2.txt`

if [ "$VAR1" -eq "$VAR2" ] ; then
  echo "OK"
fi

エラーの原因ですが、if文で「-eq」での比較は、数字での比較する場合に使用します。上記の文字列の比較ですのでその場合は「=」を使用します。

以前使用したシェルスクリプトですが2つのファイルを比較して内容が同じかどうかの処理でした。その際にファイルサイズで比較していましたがファイル内容が違っても稀に同じサイズになるので、md5sum での比較に変更してその際にif文の演算式の変更を忘れていたみたいです

integer expression expected」とエラーがでないようには、以下のように「=」の演算式で比較します

VAR1=`md5sum test1.txt`
VAR2=`md5sum test2.txt`

if [ "$VAR1" = "$VAR2" ] ; then
  echo "OK"
fi

スポンサーリンク

0
0