Bshellメモ: shift, case
Javaプログラムを起動するスクリプトを書くときなどに、良く使うのではないかと思います。とは言え、自分ではあまり使ったことないので、使い方を忘れていました。ということで、おさらい。
shiftは、コマンドラインパラメータの先頭の値を指定した数だけ押し出します。パラメータが [a b c] で、"shift 2"としたら、$* は[c]となります。これは、先頭のパラメータだけ特別扱いしたい場合、例えば、後述するcase文で分岐のためだけに使用して、残りは丸投げしたいようなときに使用します。
caseは、switch文などとほぼ同じです。ワイルドカードが指定できます。最後の *) は"otherwise"のような感じ。Bshellの制御文は終わりの文字が鏡文字になるので、慣れないと「"esac"って何?」ってなりますね。
- サンプルスクリプト "script.sh"
#!/bin/sh OP=$1 shift 1 echo "shift 1 and \$1=$1, \$*=$*" echo -n "OP = " case $OP in 1) echo "one";; 2) echo "two" ;; *) echo "???";; esac
$ sh script.sh 1 a b shift 1 and $1=a, $*=a b OP = one $ sh script.sh 3 4 5 shift 1 and $1=4, $*=4 5 OP = ??? $