シェルスクリプト覚え書きその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