ひとり勉強ログ

ITエンジニアの勉強したことメモ

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

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

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

位置パラメータとは

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

例として、「test.sh」というシェルスクリプトに、引数「file1」「file2」「file3」を指定して実行すると、 [bash] $ ./test.sh file1 file2 file3 [/bash] この場合、 $1にはfile1、 $2にはfile2、 $3にはfile3 が格納される。

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

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

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

!/bin/bash

echo "\$0 = $0" echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4" echo "\$5 = $5" [/bash]

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

シェルスクリプトを実行

上記と同様にコマンドライン引数を3つ与えて実行してみる。 [bash] $ ./param.sh file1 file2 file3 [/bash] 実行結果として以下のようになる。 [bash] $0 = ./param.sh $1 = file1 $2 = file2 $3 = file3 $4 = $5 = [/bash]

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

引数の個数

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

上記と同様に実行してみる。 [bash] $ ./param.sh file1 file2 file3 [/bash] 以下のように出力される。 [bash] $0 = ./param.sh $1 = file1 $2 = file2 $3 = file3 $4 = $5 = $# = 3 [/bash] これで引数の個数を表示することができた。 引数の指定が必須となるシェルスクリプトを作成する際など、引数の個数をチェックする際に使用することができる。