Lから始まるLinux

3章14話
ヌルコマンド
3章15話 引数処理
もくじ
3章16話
オプション処理
引数処理
若木 みどり
お兄ちゃん! コマンドは引数を受けられるよね? シェルスクリプトでもできないかな?
若木 しげる
もちろんできるよ! は引数の扱いを学んでいこう!
引数を表す特殊変数
若木 しげる
引数を扱うには 「引数を表す特殊変数」を使うんだ 以下のようなものがあるよ
変数 役割
$0 スクリプト名(コマンド名)
$1$9 n 番目の引数
$@ 引数全体(ダブルクォートで囲うと "$1" "$2" … と展開される)
$* 引数全体(ダブルクォートで囲うと "$1 $2 …" と展開される)
$# 引数の個数
若木 しげる
$1$9 「位置引数(positional parameters)」 とも呼ばれるよ 一緒に覚えておこう
若木 みどり
実例が気になるなぁ
若木 しげる
以下はシェルスクリプトを 実行したときの コマンドラインの要素を 全て表示してくれるよ
#!/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 が使えるよ!
若木 しげる
引数を処理できるようになるとスクリプトの汎用性がぐっと上がるよ!