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

1.06.2シェルスクリプト

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


例題

以下のシェルスクリプトの説明として誤っているものを選択してください。

[シェルスクリプト]

#!/bin/bash

for i in `seq 1 10`
do
    ret=`expr $i % 2`
    if [ $ret -ne 0 ]
    then
        continue
    fi
    echo $i
done

exit 0
  1. 1から10までの値を変数「i」に代入してループする
  2. exprコマンドは剰余演算を行っている
  3. exprコマンドが失敗した場合に、continueを実行する
  4. 変数「i」の内容を出力する

※この例題は実際の試験問題とは異なります。


解答と解説

答えは「3. exprコマンドが失敗した場合に、continueを実行する」です。

exprコマンドは「`(バッククオート)」で囲まれて実行されています。
このように実行した場合、コマンドの出力は変数に代入されます。

つまり、exprのコマンドの成否ではなく、出力が0かどうかをif文で判定しているということです。そのため、この選択肢は誤りです。なお、コマンドの成否を判断するためには、特殊変数「$?」を使用します。

次にシェルスクリプトの解説です。例題のシェルスクリプトは、1から10までの数値の中で、2で割り切れる値、つまり偶数のみを出力するスクリプトです。

処理の流れをスクリプトにコメントを入れて解説します。

[シェルスクリプト解説]

#!/bin/bash

# seqコマンドで1から10を出力し、順に変数iに代入する
for i in `seq 1 10`
do
    ret=`expr $i % 2`   # 変数「i」を2で割った余りを変数「ret」に代入する
    if [ $ret -ne 0 ]   # 変数「ret」が0ではない場合にif文の処理に入る
    then
        continue        # 2で割り切れない場合、処理を飛ばす
    fi
    echo $i             # 2で割り切れる場合のみ、変数「i」を出力する
done

exit 0

ループやif文の条件式など、最初はイメージしにくいかもしれません。ただシェルスクリプトを使えるようになると、作業の効率はグンと上がります。
しっかり使えるようになりましょう。


例題作成者

株式会社デージーネット ソリューション開発部 森 彰吾 氏

ページトップへ