シェルスクリプトにおける条件文の使用方法

1. 条件テスト操作

1.1 testコマンド

条件式が成立するかどうかをテストします。成立すると0を、それ以外は他の数値を返します。


$ test a=a
$ echo $?
0
$ test 1=1; echo $?
0
$ test 1 = 2 
$ echo $?
1
$ [ 1 = 1 ]
$ echo $?
0
$ [ 1 = 2 ]
$ echo $?
1

1.2 ファイルテスト

ファイルやディレクトリの存在や属性をテストします。

-eファイルまたはディレクトリが存在するか
-dディレクトリであるか
-fファイルであるか
-r読み込み権限があるか
-w書き込み権限があるか
-x実行権限があるか
-Lシンボリックリンクであるか

$ mkdir test
$ [ -e test ]; echo $?
0
$ [ -f test ]; echo $?
1
$ [ -d test ]; echo $?
0
$ test -w test; echo $?
0
$ useradd zhangsan
$ su zhangsan
$ test -w test; echo $?
1

1.3 整数値の比較

整数値の比較を行います。

-eq等しい
-gt大きい
-lt小さい
-ge以上
-le以下
-ne等しくない

$ test 100 -eq 100; echo $?
0
$ test 100 -eq 200; echo $?
1
$ test 100 -ne 200; echo $?
0
$ test 100 -le 200; echo $?
0
$ test 100 -ge 200; echo $?
1
$ [[ 99+1 -eq 100 ]]; echo $?
0
$ ((99+1==100)); echo $?
0
$ ((99+1!=100)); echo $?
1
$ [ 99 -ne 100 ]; echo $?
0

1.4 文字列の比較

=文字列が同じ
!=文字列が異なる
-z文字列が空
-n文字列が存在する

$ a=abc
$ b=ab
$ [ -z $a ]; echo $?
1
$ [ -z $b ]; echo $?
1
$ [ -n $b ]; echo $?
0
$ [ -n $a ]; echo $?
0
$ [ -n "$c" ]; echo $?
1
$ [[ $a = $b ]]; echo $?
1

1.5 論理テスト

複数の条件を組み合わせてテストします。


$ a=100
$ [ $a -gt 99 ] && [ $a -eq 100 ]; echo $?
0
$ [ $a -gt 99 ] && [ $a -ne 100 ]; echo $?
1
$ [ $a -gt 99 ] || [ $a -eq 100 ]; echo $?
0
$ [ $a -gt 999 ] || [ $a -eq 100 ]; echo $?
0
$ [ $a -gt 999 ] || [ $a -eq 10 ]; echo $?
1
$ [ $a -gt 99 -a $a -ne 100 ]; echo $?
1
$ [ $a -gt 99 ] && echo true || echo false
true
$ [ $a -lt 99 ] && echo true || echo false
false

2. if分岐構造

2.1 単一分岐構造

システムのディスク使用率が80%を超える場合にアラートを出す例:


$ mkdir demo
$ cd demo/
$ vim demo.sh
$ chmod +x demo.sh
$ ./demo.sh

2.2 二重分岐構造

httpdサービスが動作していない場合に起動する例:


if [条件]; then
  # 条件が成立した場合のコード
else
  # 条件が成立しない場合のコード
fi

2.3 多重分岐構造


if [条件1]; then
  # 条件1が成立した場合のコード
elif [条件2]; then
  # 条件2が成立した場合のコード
else
  # どちらの条件も成立しない場合のコード
fi

3. case文

case文を使用して多岐分岐を行う例:


case $変数 in
  パターン1)
    コマンド列
    ;;
  パターン2)
    コマンド列
    ;;
  *)
    コマンド列
esac

タグ: Shell 条件文 testコマンド ファイルテスト 論理テスト

8月2日 16:52 投稿