LinuCレベル1 102試験の例題と解説

主題1.06シェルとスクリプト

1.06.2シェルスクリプト

このエントリーをはてなブックマークに追加

LinuCレベル1 102試験の出題範囲から「1.06.2 シェルスクリプト 」についての例題を解いてみます。

Linucレベル1 102試験 出題範囲


例題

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研究室 勝山 遼

ページトップへ