普段、シェルスクリプトなど使わないのだけれども、使う機会が出来たのでちょっとメモするよ。
ちなみにcshやbach,zshでは無くて、普通のsh。このあたりの書き分けはめんどくさいよね。
if文
if [ "条件1" ]; then elif [ "条件2" ]; then else fi
比較式
■数値の場合
オプション | 使用例 | オプションの意味 | 数式 | 略しなかった場合 |
-eq | num1 -eq num2 | num1とnum2が等しければ真となる。 | num1=num2 | equal |
-ne | num1 -ne num2 | num1とnum2が等しくなければ真となる。 | num1≠num2 | not equal |
-lt | num1 -lt num2 | num1がnum2より小ならば真となる。 | num1 | less than |
-le | num1 -le num2 | num1がnum2以下ならば真となる。 | num1≦num2 | less than or equal |
-gt | num1 -gt num2 | num1がnum2より大ならば真となる。 | num1>num2 | greater than |
-ge | num1 -ge num2 | num1がnum2以上ならば真となる。 | num1≧num2 | greater than or equal |
■文字列の場合
等しい場合
if [ "A" = "B" ]; then fi
等しくない場合
if [ "A" != "B" ]; then fi
ここでちょっとつまずいたこと、文字列の比較対象に変数を置くとき、変数が空の場合には下記のようなエラーが出ます。
[: 10: =: unexpected operator
この場合には変数を"(ダブルクォーテーション)で囲みましょう。
if [ "$D" = "abc" ]; then fi
http://www.geocities.jp/geo_sunisland/if_and_test.html
tips
後、初歩的な事だけどつまずいた。変数に値を代入する場合は、スペースは空けないこと。
# NG DATE = "20100727" # OK DATE="20100727
その他には、コマンドを変数に代入するには逆クォーテーション(`)で囲むこととか。
DATE=`date --date '1day ago' '+%Y%m%d'`
以上。