LinuCレベル1 Version 4.0 102試験の例題と解説
105.2 簡単なスクリプトのカスタマイズまたは作成
■トピックの概要
このトピックの内容は以下の通りです。
<105.2 簡単なスクリプトのカスタマイズまたは作成>
重要度 4
<説明>
既存のスクリプトをカスタマイズしたり、簡単なBashスクリプトを新規作成できる。
<主要な知識範囲>
・標準的なshの構文(ループ、テスト)を使用する
・コマンド置換を使用する
・コマンドによって返される、成功または失敗を示す戻り値やその他の情報をテストする
・条件に応じて、スーパーユーザにメールを送信する
・先頭行(#!)を利用して、適切なスクリプトインタプリタを選択する
・スクリプトの位置、所有権、実行権、SUID権を管理する
<重要なファイル、用語、ユーティリティ>
・for
・while
・test
・if
・read
・seq
・exec
■例題
以下のシェルスクリプトの説明として誤っているものを選択してください。
[シェルスクリプト]
-------------------------------------------------------------------------------------
#!/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のコマンドの成否ではなく、出力が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文の条件式など、最初はイメージしにくいかもしれません。ただシェルスクリプトを使えるようになると、作業の効率はグンと上がります。
しっかり使えるようになりましょう。
■例題作成者 株式会社デージーネット ソリューション開発部 森 彰吾 氏