Bash - 整数表現が必要です

Bash - 整数表現が必要です

私のテーマのアップデートスクリプトをチェックしています。

2つのテキストファイルがあります。最初のファイルは「current.txt」で、現在のバージョンが含まれています。4.1.1このテキストファイルには文字列があります。

2番目のファイルは「latest.txt」で、最新バージョンが含まれています。4.2このテキストファイルには文字列があります。

コードは次のとおりです。

echo "Checking update";
x=$(cat ./current.txt)
y=$(cat ./latest.txt)
if [ "$x" -eq "$y" ]
then
       echo There is version $y update
else
       echo Version $x is the latest version
fi

つまり、current.txtが最新の.txtと異なる場合は、「バージョン4.2に更新されました」と表示されます。そうでない場合は、「バージョン4.1.1が最新バージョンです」と表示されます。

しかし、実行しようとすると。このエラーが発生します。

Checking update
./test.sh: line 4: [: 4.1.1: integer expression expected
Version 4.1.1 is the latest version

それでは、私が何を間違っているのでしょうか?

ベストアンサー1

これtestとも呼ばれるコマンドには、[文字列比較と整数比較のための別々の演算子があります。

整数 1 -eq 整数 2

INTEGER1はINTEGER2と同じです。

そして

文字列1 = 文字列2

文字列平等

そして

文字列 1 != 文字列 2

文字列が同じではありません。

データが厳密に言えば整数ではないため、テストでは文字列比較演算子を使用する必要があります。コメントの最後の認識は、「-eq」ロジックがechoif / elseステートメントの意味と一致しないため、新しいコードスニペットは次のようにする必要があることです。

...
if [ "$x" != "$y" ]
then
       echo There is version $y update
else
       echo Version $x is the latest version
fi

おすすめ記事