シェルスクリプトでは、実行するときに値を渡して、その値をスクリプト内で利用することができます。
例えば、次のようにスクリプトを実行します。
./sample.sh test.txtこのtest.txtのように、スクリプトの実行時に渡す値を**引数(ひきすう)**と呼びます。
引数を利用すると、スクリプトの内容を毎回変更することなく、処理対象を変更できます。
今回は、シェルスクリプトで引数を受け取る基本的な方法として、以下について解説します。
$1、$2、$3で引数を受け取る$0でスクリプト自身の名前を取得する$#で引数の数を取得する- 引数が指定されているかチェックする
1. シェルスクリプトに引数を渡す
まず、次のシェルスクリプトを作成します。
#!/bin/bash
echo "引数は $1 です。"
ファイル名をsample.shとして保存します。
このスクリプトを、次のように実行します。
./sample.sh test.txt
実行結果は次のようになります。
引数は test.txt です。
ここで使用している$1が、1番目の引数を表しています。
つまり、
./sample.sh test.txt
と実行した場合、
$1 → test.txt
となります。
$1は何を表している?
シェルスクリプトでは、実行時に渡された引数を番号で取得できます。
$1 → 1番目の引数$2 → 2番目の引数$3 → 3番目の引数
そのため、非常にシンプルに引数を利用できます。
2. $1、$2、$3で引数を受け取る
引数が複数ある場合は、それぞれの番号を指定します。
例えば、次のスクリプトを作成します。
#!/bin/bash
echo "1番目の引数: $1"
echo "2番目の引数: $2"
echo "3番目の引数: $3"
次のように実行します。
./sample.sh aaa bbb ccc
実行結果:
1番目の引数: aaa
2番目の引数: bbb
3番目の引数: ccc
このように、半角スペースで区切られた引数の位置によって取得する変数が決まっています。
| 変数 | 意味 |
|---|---|
$1 | 1番目の引数 |
$2 | 2番目の引数 |
$3 | 3番目の引数 |
例えば、
./sample.sh input.txt output.txt
と実行した場合、
$1 → input.txt$2 → output.txt
となります。
この仕組みを利用すると、入力ファイルと出力ファイルを指定するようなスクリプトを作ることができます。
3. $0は何を表す?
引数を扱うときに覚えておきたいのが$0です。
$0は、実行されたシェルスクリプト自身の名前を表します。
例えば、次のようなスクリプトを作成します。
#!/bin/bash
echo "スクリプト名: $0"
echo "1番目の引数: $1"
これを、
./sample.sh test.txt
と実行します。
実行結果:
スクリプト名: ./sample.sh
1番目の引数: test.txt
このように、
- $0 → スクリプト自身
- $1 → 1番目の引数
- $2 → 2番目の引数
- $3 → 3番目の引数
という関係になっています。
$0を使うメリット
$0は、エラー時に使用方法を表示するときなどに便利です。
例えば、
echo "使用方法: $0 ファイル名"
としておけば、スクリプト名を直接書かなくても、実行したスクリプトの名前を表示できます。
4. $#で引数の数を取得する
「引数が何個渡されたのか」を確認したい場合は、$#を使用します。
例えば、次のスクリプトを作成します。
#!/bin/bash
echo "引数の数: $#"
次のように実行します。
./sample.sh aaa bbb ccc
実行結果:
引数の数: 3
$#には、スクリプトに渡された引数の数が入ります。
例えば、
./sample.sh
なら、
- $# → 0
となります。
また、
./sample.sh aaa
なら、
- $# → 1
となります。
$#を使って引数の数をチェックする
$#は、実務でもよく利用します。
例えば、「引数を1つ指定しなければならない」スクリプトを作る場合です。
#!/bin/bash
if [ $# -ne 1 ]; then
echo "使用方法: $0 ファイル名"
exit 1
fi
echo "処理対象: $1"
このスクリプトは、引数が1個でなければエラーにします。
引数を指定せずに、
./sample.sh
と実行すると、
使用方法: ./sample.sh ファイル名
と表示されます。
一方、
./sample.sh test.txt
と実行すると、
処理対象: test.txt
と表示されます。
このように、$#で引数の数を確認してから処理を開始することで、引数不足による意図しないエラーを防ぐことができます。
まとめ
今回は、シェルスクリプトで引数を受け取る基本的な方法を紹介しました。
覚えておきたいのは、次の4つです。
| 変数 | 意味 |
|---|---|
$0 | スクリプト自身の名前 |
$1 | 1番目の引数 |
$2 | 2番目の引数 |
$3 | 3番目の引数 |
$# | 引数の数 |
特に、
./sample.sh input.txt output.txt
のように実行した場合、
- $0 → ./sample.sh
- $1 → input.txt
- $2 → output.txt
- $# → 2
となることを覚えておくと、引数の仕組みを理解しやすくなります。
まずは$1、$2、$0、$#の4つを使えるようになるところから始めてみましょう。
ここまで読んでいただき、ありがとうございます。もしこの記事の技術や考え方に少しでも興味を持っていただけたら、ネクストのエンジニアと気軽に話してみませんか。
- 選考ではありません
- 履歴書不要
- 技術の話が中心
- 所要時間30分程度
- オンラインOK