LinuCレベル1 Version 4.0 102試験の例題と解説
105.2簡単なスクリプトのカスタマイズまたは作成
今回は、LinuC 102試験の試験範囲から「105.2 簡単なスクリプトのカスタマイズまたは作成」についての例題を解いてみます。
シェルスクリプトを作る上で、プロンプト入力でスクリプト続行か終了かを制御できるreadコマンドはとても便利です。動作を理解しておきましょう。
Linucレベル1 Version 4.0 102試験 出題範囲
例題
以下のシェルスクリプトの説明として、誤っているものを選択してください。
1行目 #!/bin/bash
2行目
3行目 while true
4行目 do
5行目 echo "This calculate (x * y)."
6行目 read -p "Input x = " x
7行目 read -p "Input y = " y
8行目 echo "x * y = `expr $x \* $y`"
9行目
10行目 read -p "別の計算をしますか? [Y/n]" yesno
11行目 if [ "$yesno" != "Y" ];then
12行目 echo quit.
13行目 exit 0
14行目 fi
15行目 done
- プロンプトに「Input x = 」と表示し、ユーザに x の値の入力を求める
- プロンプトに「Input y = 」と表示し、ユーザに y の値の入力を求める
- x, y の値を入力すると、標準出力に「x * y = 」とともに、x と y の掛け算の結果を出力する
- プロンプトに「別の計算をしますか? [Y/n]」と表示された際、「Y」 と入力すればスクリプトが終了する
※この例題は実際の試験問題とは異なります。
解答と解説
正解は「4. プロンプトに「別の計算をしますか? [Y/n]」と表示された際、「Y」 と入力すればスクリプトが終了する」です。
read コマンドは、標準入力から1行読みこんで、変数に格納することができます。
readコマンドの構文は以下の通りです。
read [-p PROMPT_STRING] [VAR1] [VAR2] ...
「-p PROMPT_STRING」をつけて実行すると、PROMPT_STRING をプロンプトとして表示します。
VAR1、VAR2、… には、ユーザが標準入力に入力した値が代入されます。
下記の例では、「read VAR1 VAR2」 を実行した例です。
(例1)
ユーザの標準入力が「arg1」 であった場合、
VAR1=arg1, VAR2="" が代入されます。
(例2)
ユーザの標準入力が「arg1 arg2」 であった場合、
VAR1=arg1, VAR2=arg2 が代入されます。
(例3)
ユーザの標準入力が「arg1 arg2 arg3」 であった場合、
VAR1=arg1, VAR2="arg2 arg3" が代入されます。
また、VAR1、VAR2、… を省略して実行した場合、ユーザの入力は捨てられます。
次に、例題のスクリプトをコメント行で解説します。
1行目 #!/bin/bash
2行目
3行目 while true
#無限ループします。
4行目 do
5行目 echo "This calculate (x * y)."
6行目 read -p "Input x = " x
#プロンプトを表示し、ユーザに x の値の入力を求めます
7行目 read -p "Input y = " y
#プロンプトを表示し、ユーザに y の値の入力を求めます
8行目 echo "x * y = `expr $x \* $y`"
#入力された x と y の値の掛け算を行い、標準出力に出力します。
#ただし、x と y は整数でなければ計算は失敗します。
9行目
10行目 read -p "別の計算をしますか? [Y/n]" yesno
#プロンプトを表示し、ユーザの入力を変数 yesno に代入します
11行目 if [ "$yesno" != "Y" ];then
変数 yesno の値が 「Y」でなければ、スクリプトを終了します。
12行目 echo quit.
13行目 exit 0
14行目 fi
15行目 done
例題の選択肢を一つずつ見ていきましょう。
[1. プロンプトに「Input x = 」と表示し、ユーザに x の値の入力を求める]
正しいです。6行目のread コマンドで「Input x = 」というプロンプトを表示し、x の値の入力を求めています。
[2. プロンプトに「Input y = 」と表示し、ユーザに y の値の入力を求める]
正しいです。7行目のread コマンドで「Input y = 」というプロンプトを表示し、y の値の入力を求めています。
[3. x, y の値を入力すると、標準出力に「x * y = 」とともに、x と y の掛け算の結果を出力する]
正しいです。8行目の「`expr $x \* $y`」 によって x と y の掛け算が実行され、echo コマンドで標準出力に「x * y = 」とともに掛け算の結果が出力されます。
[4. プロンプトに「別の計算をしますか? [Y/n]」と表示された際、「Y」 と入力すればスクリプトが終了する]
誤りです。「Y」を入力するとループの最初から実行されます。「Y」以外を入力することで、スクリプトは終了します。
例題作成者
株式会社デージーネット OSS研究室 後藤 慎司