argius note

プログラミング関連

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 = ???
$