シェルスクリプト実行時に引数を渡して利用する書き方と補足として特殊変数についての紹介をしていきます
引数とは
引数(パラメータとも呼ばれる)とはシェルスクリプト実行時に、シェルに渡される値のことです。作業者がシェルを実行しようとした際に任意の値をコマンド実行と同時に記述することでシェル内で引数を利用することができます。
通常のシェル実行コマンド
ubuntu@sample:~$ ./ファイル名.sh
引数を渡してシェルを実行するコマンド
ubuntu@sample:~$ ./ファイル名.sh 引数
引数を記述する際には実行するファイル名に対して半角スペースで区切って記述します。引数の渡し方についての詳細は後述しますのでそちらをご覧ください。
引数の渡し方と利用方法について
引数の渡し方と利用方法について紹介していきます
引数の渡し方
シェル実行時の引数の渡し方について解説していきます
引数を渡すにはシェル実行時に下記のようにして記述します
ubuntu@sample:~$ ./ファイル名.sh 引数
また、複数の引数を渡したい場合には半角スペースで区切って記述することができます
ubuntu@sample:~$ ./ファイル名.sh 引数1 引数2 引数3
渡された引数は下記のように呼ばれます
- 引数1 ⇒ 第一引数(第一パラメータとも呼ばれる)
- 引数2 ⇒ 第二引数
- 引数3 ⇒ 第三引数
また、例外的に指定したファイル名を第0引数と呼ぶ人もいます。その理由については後述していきます。
引数の使い方
渡した引数の利用方法について解説していきます
まず、引数を渡したらそれぞれの引数は渡した順番ごとに特殊な変数に格納されます。
自動的に格納される変数は下記のとおりです。
- 第一引数 ⇒ $1
- 第二引数 ⇒ $2
- 第三引数 ⇒ $3
ちなみに実行したファイル名は$0に格納されます。
各変数に引数が格納されているので、後は通常の変数を利用するのと同じ要領で使用することができます。
ファイル:dog.sh
#! /bin/bash
echo $1 $2 $3 #第一引数から第三引数の値が出力される
echo $0 #実行したファイル名が出力される
exit 0
引数を指定して表示させる
ではこれまでの解説を踏まえて実際に引数を指定して出力していきます
使用するファイルは上記でも紹介したdog.shを使用します。記述内容はすでにお見せしていますが以下の通りです。
#! /bin/bash
echo $1 $2 $3 #第一引数から第三引数の値が出力される
echo $0 #実行したファイル名が出力される
exit 0
それでは引数を渡して出力結果を確認します
ubuntu@sample:~$ ./dog.sh 第一引数 第二引数 第三引数
第一引数 第二引数 第三引数
./dog.sh
シェルに渡した引数が出力されており、実行したファイルも確認できました。
補足 利用できる特殊変数
上記で紹介した以外にもよく利用する特殊変数があるのでご紹介していきます
変数名 | 概要 |
---|---|
$0 | シェルスクリプトのファイル名を格納します |
$1~$n | コマンド実行時に渡した引数を格納します |
$# | シェルに渡した引数の数を格納します |
$@ | 全引数を格納します |
$? | 最後に実行したコマンドの戻り値を格納します(成功 = 0 失敗 = 0以外) |
戻り値を確認する($?)
シェルスクリプトを利用する際に引数の利用だけではなくファイル内で別のシェルを実行する場面が多くあります。
そんな時に各ファイルの処理が正常に完了しているかを確認することができるのが”$?“です。
補足として戻り値を確認する$?の使い方について紹介していきます。
まず、dog.shファイルを以下のように書き換えます
#! /bin/bash
./error.sh
exit 0
こちらのファイルではerror.shというファイルを呼び出して実行するシンプルな内容となっています
新たにerror.shファイルを作成します。記述内容は以下の通りです
#! /bin/bash
cho "シーズー"
echo $?
exit 0
error.shでは文字列’シーズー’を出力して実行結果を”$?“に格納して出力します。
ただし、通常では文字列を出力させるコマンドはechoコマンドですが、こちらのファイルではあえてeを省いたchoとしています。
そうすることで実行結果としては失敗を表す0以外を戻り値として返します。
実際に確認してみましょう。
ubuntu@sample:~$ ./dog.sh
./error.sh: 行 3: cho: コマンドが見つかりません
127
期待通りに0以外の数字である127が実行結果として表示されました。