条件分岐

if文

elseが無いif文はこんな感じ

if 条件式
then
  処理
fi

then節とelse節がある場合

if 条件式
then
  処理1
else
  処理2
fi

else ifみたいなのが付く場合

if 条件式1
then
  処理1
elif 条件式2
then
  処理2
elif 条件式3
then
  処理3
else
  処理4
fi

case文

switch case文みたいな構文もあるそうだ。

month=$1
case $month in
  12|1|2)
    echo "winter";;
  3|4|5)
    echo "spring";;
  6|7|8)
    echo "summer";;
  9|10|11)
    echo "autumn";;
  *)
    echo "no such season";;
esac

これをseason.shって名前つけて、chmod +x して実行してみると

./season.sh 10
autumn
  • なぜ$month=$1じゃないの?caseの行でmonthに$が付くのはなぜ?
  • 演算子=の両側にスペースつけじゃダメっぽい。
  • 引数である$1は文字列だからmonthもなのかな?そうなら"12"|"1"|"2"とかしなくていいのかな?...と思ってやってみたらそれでもエラーにならなかった。暗黙の型変みたいなのがあるのかな?
  • 最後のワイルドカードを"*"ってやると、さすがにダメだった。

特に最初の2つが理解できない。