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