LinuCレベル1 102試験の例題と解説
1.06.2シェルスクリプト
LinuCレベル1 102試験の出題範囲から「1.06.2 シェルスクリプト 」についての例題を解いてみます。
例題
2個以上の引数が必要なシェルスクリプトを作成します。
プログラム起動時に引数の数をチェックし、引数が2個以上指定されていない場合はエラーとします。
引数の数のチェック部について、下記のうち正しいを選択してください。
1.
if [ $# -lt 2 ]
then
echo "ERROR: 引数が不足しています"
exit 1
fi
2.
if [ $* -lt 2 ]
then
echo "ERROR: 引数が不足しています"
exit 1
fi
3.
if [ $0 -lt 2 ]
then
echo "ERROR: 引数が不足しています"
exit 1
fi
4.
if [ $args -lt 2 ]
then
echo "ERROR: 引数が不足しています"
exit 1
fi
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「1」です。
引数処理に使用する変数は以下の通りです。
$# | : | 実行時に指定された引数の数を表す変数 |
$@ | : | スクリプト実行時に指定された全引数が格納される変数(引数ひとつひとつが""で囲まれる形式) |
$* | : | スクリプト実行時に指定された全引数が格納される変数(引数のすべてが""で囲まれる形式) |
$0 | : | 実行時のスクリプト名が格納される変数 |
$[1-n] | : | スクリプト実行時に指定した引数の値がそれぞれ格納される変数 |
それぞれの変数の仕様例を紹介します。
例1)script1.sh
ーー
#!/bin/bash
echo $#
ーー
$ script1.sh one two three
3
$# を表示すると、引数の数が表示されます。
例2)script2.sh
ーー
#!/bin/bash
echo $*
ーー
$ script2.sh one two three
one two three
$* を表示すると、すべての引数が表示されます。
例3)script3.sh
ーー
#!/bin/bash
echo $0
ーー
$ script3.sh one two three
script3.sh
$0 を表示すると、実行したスクリプト名が表示されます。
例題について解説します。
「1」は、正解です。
$# はコマンド実行時に指定された引数の数を表す変数です。
本例では引数の数が2より小さい場合にエラーメッセージを表示しています。
「2」は、不正解です。
$* はコマンド実行時に指定されたすべての引数を表す変数です。
この変数では引数の数を参照することはできません。
「3」は、不正解です。
$0 は実行したコマンド名を表す変数です。
この変数では引数の数を参照することはできません。
「4」は、不正解です。
$args はargsという名前のシェル変数です。
この変数では引数の数を参照することはできません。
引数処理に使用する変数は、シェルスクリプトを作成するときによく利用します。それぞれの変数の特徴を捉えて、正しく利用できるようにしておきましょう。
例題作成者
株式会社デージーネット OSS研究室 勝山 遼