私のテーマのアップデートスクリプトをチェックしています。
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」ロジックがecho
if / elseステートメントの意味と一致しないため、新しいコードスニペットは次のようにする必要があることです。
...
if [ "$x" != "$y" ]
then
echo There is version $y update
else
echo Version $x is the latest version
fi