#05 シェルスクリプトからコマンドライン引数を扱う

Linuxのコマンドでは、コマンドライン引数によって様々な値を取得することができる。
例として、「cat」コマンドで「file1 file2 file3」と引数を指定するとfile1、file2、file3のファイルの中身が表示される。

シェルスクリプトの中からこのコマンドライン引数を扱うには「位置パラメータ」よ呼ばれるものを使用する。

位置パラメータとは

$1,$2,$3といたように1から順に並んだ変数。
シェルスクリプトを呼び出した際に、$1,$2,$3..それぞれにコマンドライン引数が格納される。

例として、「test.sh」というシェルスクリプトに、引数「file1」「file2」「file3」を指定して実行すると、

$ ./test.sh file1 file2 file3

この場合、
$1にはfile1、
$2にはfile2、
$3にはfile3
が格納される。

※上記コマンドは引数が格納されることを説明する目的で例示した。

位置パラメータを取得するシェルスクリプトを作成

Vimで「param.sh」というファイル名を作成、以下を記述、実行権限を付与する。

#!/bin/bash

echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
echo "\$5 = $5"

「\$0」は実行結果に「$0」と表示させるため、エスケープ処理を行っている。

シェルスクリプトを実行

上記と同様にコマンドライン引数を3つ与えて実行してみる。

$ ./param.sh file1 file2 file3

実行結果として以下のようになる。

$0 = ./param.sh
$1 = file1
$2 = file2
$3 = file3
$4 =
$5 =

「$0」には「./param.sh」が格納される。特殊パラメータの1つ。
「$1」「$2」の位置パラメータには引数として指定した「file1」「file2」「file3」が出力されている。
今回は引数を3つしか指定していないため、「$4」と「$5」は空となっている。

引数の個数

引数の個数は、「$#」という変数で参照することができる。
上記で作成した「param.sh」の最終行に以下を追記し保存する。

echo "\$# = $#"

上記と同様に実行してみる。

$ ./param.sh file1 file2 file3

以下のように出力される。

$0 = ./param.sh
$1 = file1
$2 = file2
$3 = file3
$4 =
$5 =
$# = 3

これで引数の個数を表示することができた。
引数の指定が必須となるシェルスクリプトを作成する際など、引数の個数をチェックする際に使用することができる。

シェルスクリプト の一覧