お兄ちゃん!
コマンドは引数を受けられるよね?
シェルスクリプトでもできないかな?
もちろんできるよ!
は引数の扱いを学んでいこう!
引数を扱うには
「引数を表す特殊変数」を使うんだ
以下のようなものがあるよ
変数 | 役割 |
---|---|
$0 |
スクリプト名(コマンド名) |
$1 ~ $9 |
n 番目の引数 |
$@ |
引数全体(ダブルクォートで囲うと "$1" "$2" … と展開される) |
$* |
引数全体(ダブルクォートで囲うと "$1 $2 …" と展開される) |
$# |
引数の個数 |
$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
が使えるよ!引数を処理できるようになるとスクリプトの汎用性がぐっと上がるよ!