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"figtは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"fibashや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")