シェルスクリプト覚え書きその2 制御構造編
条件分岐
- if文
例:ひとつ目の引数が1ならYES,そうでないならNOと出力
#!/bin/bash if [ "$1" = "1" ] ;then # [,],=の前後にスペースが必要 echo "YES" else echo "NO" fi
比較
文字列の比較
str1 = str2
str1とstr2が等しい
str1 != str2
str1とstr2が等しくない
-n str1
str1が空
-z str1
str1は空ではない整数の比較
int1 -eq int2
int1 == int2
int1 -ne int2
int1 != int2
int1 -lt int2
int1 < int2
int1 -le int2
int1 <= int2
int1 -gt int2
int1 > int2
int1 -ge int2
int1 >= int2
例:2つの引数のうち小さい方を表示する
if [ "$1" -le "$2" ];then echo $1 else echo $2 fi
- case文
<文字列>が<パターン>に一致する場合に処理を実行して抜ける
case <文字列> in <パターン1>) 処理 ;; <パターン2>) 処理 ;; esac
繰り返し
- for文
for文を用いるとリストの各要素について順番に処理を行うことが出来る
for <変数名> in <リスト> do 繰り返す部分 ここではリストの各要素が変数名で参照できる done
例 001.txtから005.txtまでの5つのファイルを作成*1
#!/bin/bash for n in $(seq 1 5) do touch "00$n.txt" done
- while文
<条件>が真である(終了ステータスが0である)間は繰り返し処理を行う
while <条件(コマンド)> do 繰り返し処理 done
例:無限ループ
一秒ごとにhogeと言う
#!/bin/bash while : do echo hoge sleep 1 done
*1:実際にはブレース展開のほうが便利 katorinax.hatenablog.com