IF文
書き方
if[条件式 ];then
処理
elif[条件式 ];then
処理
else
処理
fi
具体例
if[$NUM-eq 0 ];then# $NUMが0と一致した場合echo"Succeed"elif[$NUM-eq 1 ];then# $NUMが1と一致した場合echo"Cleared"else
echo"Failed"fi
注意点
[
の直後と]
の直前には半角スペースが必要- testコマンドの略式なので,testコマンドでも同様に書き換え可能
条件式の書き方
文字列の比較
文字列の比較には =
や !=
を使う.
if[$STR="sunny"];then
echo"Succeed"elif[$STR!="rainy"];then
echo"Cleared"else
echo"Failed"fi
数値の比較
数値の比較には -eq
や -ne
を使う.
Python | シェルスクリプト |
---|---|
== | -eq |
>= | -ge |
> | -gt |
!= | -ne |
if[$NUM-eq 0 ];then
echo"NUM == 0"elif[$NUM-gt 10 ];then
echo"NUM > 10"fi
gt
はgreater thanなので,逆向きの演算子として -lt
や -le
がある.
論理演算(AND/OR/NOT)
論理演算子は以下がサポートされている.
Python | シェルスクリプト |
---|---|
and | -a |
or | -o |
not | ! |
if[$NUM-eq 0 -a$STR="foo"];then
echo"NUM == 0 and STR == foo"elif[$NUM-gt 10 -o!$FLAG];then
echo"NUM > 10 or not FLAG"fi
変数が定義済みか
文字列(変数 STR
)の長さが0(空)である場合にTRUE → -z
if[-z"$STR"];then
echo"Zero"fi
文字列(変数 STR
)の長さが0(空)でない場合にTRUE → -n
if[-n"$STR"];then
echo"Nonzero"fi
正規表現による比較
exprコマンドで正規表現の比較ができる.
if expr"123-4567" : "^[0-9]\{3\}-[0-9]\{4\}";then
echo"True"else
echo"False"fi
bashやzshであれば [[ $target =~ REGEX ]]
のように書くことで正規表現で比較できるらしい.
シェルスクリプトでの正規表現を使ったバリデーション - unhurried
ファイル/ディレクトリの存在
ファイルまたはディレクトリ dat
が存在する場合にTRUE → -e
if[-e"dat"];then
echo"Existing"fi
ファイル 1.txt
が存在する場合にTRUE → -f
if[-f"1.txt"];then
echo"Existing file"fi
ディレクトリ samples
が存在する場合にTRUE → -d
if[-d"samples"];then
echo"Existing dir"fi
コマンドの実行結果
$?
を使えば直前のコマンドの実行結果を確認できる.
mkdir sample # 直前のコマンドif[$?-eq 0 ];then
echo"OK"else
echo"NG"fi
ワンライナーで書く方法もある.
mkdir sample &&echo"OK"||echo"NG"
複数ならべる時はカッコをつければよい.
mkdir sample &&(echo"OK1"&&echo"OK2")||(echo"NG1"&&echo"NG2")