お兄ちゃん!
コマンドは引数を
受けられるよね?
シェルスクリプトでも
できないかな?
もちろんできるよ!
は引数の扱いを
学んでいこう!
引数を扱うには
「引数を表す特殊変数」を使うんだ
以下のようなものがあるよ
| 変数 | 役割 |
|---|---|
$0 |
スクリプト名(コマンド名) |
$1 ~ $9 |
n 番目の引数 |
$@ |
引数全体(ダブルクォートで囲うと "$1" "$2" … と展開される) |
$* |
引数全体(ダブルクォートで囲うと "$1 $2 …" と展開される) |
$# |
引数の個数 |
特に 「位置引数
(positional parameters)」
とも呼ばれるよ
一緒に覚えておこう
$1 ~ $9 は
実例が気になるなぁ
以下は
シェルスクリプトを
実行したときの
コマンドラインの要素を
全て表示してくれるよ
#!/bin/bash
echo "スクリプト名: $0"
echo "引数の個数: $#"
for ARG in "$@"
do
echo "引数: $ARG"
done
これを実行すれば引数の扱いがわかりやすいね!
shift コマンド位置引数
$1 ~ $9 が引数の値になるんだよね引数が10個以上になったらどうなるのかな?そのままだと10番目以降の引数は位置引数
$1 ~ $9 では扱えないよそういう時は引数の位置をずらすshift を使うんだshift [N]
これは引数の値を
N 個ずらしてくれるんだN の指定がなければ 1 になるよ1 ずらす場合は以下のようになるんだ$2の値が$1へ$3の値が$2へ- …10番目以降も同様にずらされる
このように引数をずらして使えば10個目以降の引数を扱えるようになるんだね
以下はさっきの例を
shift を使って書き直したものだよ#!/bin/bash
echo "スクリプト名: $0"
echo "引数の個数: $#"
while [ "$#" -gt 0 ]
do
echo "引数: $1"
shift
done
$1 を表示」shift で要素をずらすを繰り返して引数が無くなったら終了なんだねかしこい!shift には一つ注意があるよずらすと先頭にあった要素の値は失われてしまうんだ必要なら shift 実行前に値を別の変数に保存しておくといいよ今回はシェルスクリプトの引数の扱い方を学んだよ!引数を表す特殊変数と
shift が使えるよ!引数を処理できるようになるとスクリプトの汎用性がぐっと上がるよ!