導入
sh backup.sh logs のように、実行するときに値を渡したい。渡された値は、スクリプトの中で $1・$2… という名前で待っています。これを 位置パラメータ と呼びます。
説明
渡された引数は、左から順に番号が振られます。
#!/bin/bash
echo "スクリプト名: $0"
echo "1つ目: $1"
echo "2つ目: $2"
echo "引数の数: $#"
echo "全部まとめて: $@"
| 書き方 | 意味 |
|---|---|
$0 | スクリプト自身の名前 |
$1 $2 … | 1つ目、2つ目…の引数 |
$# | 引数の個数 |
$@ | 全部の引数(1つずつ別の値として) |
このスクリプトは、下の端末から引数つきで実行します。
sh script.sh 東京 大阪
$#(個数)は、引数が足りないときに止めるために使います。引数を前提にしたスクリプトが、引数なしで走ると悲惨なことになるからです(rm -rf $1/ が rm -rf / になる、は実際に起きた事故です)。判定の書き方は第4章で扱いますが、まずは「個数を知る手段がある」ことを押さえてください。
flowchart LR
A["sh script.sh 東京 大阪"] --> B["$0 = script.sh"]
A --> C["$1 = 東京"]
A --> D["$2 = 大阪"]
A --> E["$# = 2"]
引数を使うときも、二重引用符で囲むのを忘れずに。"$1" と書いておけば、スペースを含むファイル名を渡されても壊れません。
やってみよう
まず引数なしで sh script.sh を実行し、$1 が空になることを確かめましょう。次に sh script.sh 東京 大阪 として、番号どおりに値が入ることを確認します。sh script.sh a b c d のように増やして、$# が変わることも見てください。
演習
sh script.sh 東京 大阪 を実行して、1つ目: 東京 と表示させてください。
ヒント1を見る
下の端末に sh script.sh 東京 大阪 と打ちます(「▶ 実行」ボタンは引数なしの実行です)。
ヒント2を見る
sh script.sh 東京 大阪