テーマの更新スクリプトのチェックを行っています
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がlatest.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
だから私はこれで何が間違っているのですか?
test
コマンドは、[
とも呼ばれ、文字列比較と整数比較用に別々の演算子があります。
INTEGER1 -eq INTEGER2
INTEGER1はINTEGER2と等しい
対
STRING1 = STRING2
文字列は等しい
そして
STRING1!= STRING2
文字列が等しくない
データは厳密には整数ではないため、テストでは文字列比較演算子を使用する必要があります。コメントの最後の認識は、 "-eq"ロジックがif/else echo
ステートメントの意味と一致しなかったため、新しいスニペットは次のようになります。
...
if [ "$x" != "$y" ]
then
echo There is version $y update
else
echo Version $x is the latest version
fi
ところで、2つのバージョン文字列がある場合(例:$x
および$y
)printf
およびGNU sort
を使用して、どちらが新しいかを見つけることができます。
$ x=4.1.1
$ y=4.2.2
$ printf "%s\n" "$x" "$y" | sort -V -r
4.2.2
4.1.1
$ if [ $(printf "%s\n" "$x" "$y" | sort -V -r | head -1) = "$x" ] ; then
if [ "$x" = "$y" ] ; then
echo "$x is equal to $y"
else
echo "$x is newer than $y"
fi
else
echo "$x is older than $y"
fi
4.1.1 is older than 4.2.2