if / elseステートメントで変数を整数ではなくテキスト文字列と比較するにはどうすればよいですか?


24

シェルスクリプトを作成する過程で、スクリプトの途中にある次のif / elseステートメントの問題に遭遇しました。

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi

返されるエラー:

./gitup: line 13: [: add: integer expression expected

その後、残りのスクリプトを続行します。ifセグメントで変数を整数ではなく文字列入力と評価/比較するにはどうすればよいですか。私が試した他のいくつかのことの中で「!=」を使用する場合、別のエラーが必要でした。

回答:


38

このようなもの:

act="add"
if [[ $act = "add" ]]
then
    echo good
else
    echo not good
fi

-eq数値比較用=、文字列比較用


ありがとう。私はそれを試してみましたが、キーストロークを必要とするスクリプトは解放されましたが、関連性のない構文エラーが原因であることがわかりましたので、これは完全に機能しました。助けてくれてありがとう。
tony_perkis666

3
@josephmarhee:[[]]テストはBash固有の構成であり、この例[]は質問で使用されているPOSIXでも同様に機能することに注意してください。インタプリタが明示的に#!/bin/bashまたは同様に指定されている場合、[[]]問題なく使用できます(Bashの代替よりも少し高速です-とにかくボトルネックであるとは思わない)、そうでなければ固執する必要があり[]ます。Bashの詳細がまったく必要ない場合、Dashなどではスクリプトの実行が少し速くなります。また、POSIXは固有の移植性を保証します。
ダニエルアンダーソン

4

この方法でも機能します。@Guruの答えに非常に似ていますが、二重角括弧の必要がなくなります。

if [ "$act" == "add" ]
then
echo "Good!"
      else
      echo "Not good!"
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.