LinuCレベル1 シェルおよびスクリプト 問21
シェルおよびスクリプト/シェルスクリプト次の内容のシェルスクリプト svc.sh を「bash svc.sh start」として実行したときの出力として適切なものはどれか。 case "$1" in start|run) echo "A" ;; st*) echo "B" ;; *) echo "C" ;; esac
当サイトのオリジナル問題(LinuCレベル1の出題範囲「シェルおよびスクリプト」に対応。実際の試験問題ではありません)
- AAだけが表示される
- BAとBが表示される
- CAとBとCが表示される
- DCだけが表示される
正解:A
解説
case文は、値を上から順にパターンと照合し、最初に一致したパターンの処理だけを実行します。「;;」はその処理の終わりを表し、以降のパターンは照合されずにesacの後へ進みます。「start」は1つ目のパターン start|run(「|」はいずれかに一致)に一致するため、Aだけが表示されます。「st*」にも一致しますが、先に一致したパターンがあるので実行されません。どのパターンにも一致しない値を受ける既定の処理は、最後に「*)」で書くのが定石です。
選択肢ごとの解説
- A正しい。最初に一致した start|run の処理だけが実行され、「;;」でcase文を抜けます。
- B誤り。「;;」で終わる処理の後は次のパターンへ進まないため、st* の処理は実行されません。
- C誤り。「*)」はどのパターンにも一致しなかった場合の受け皿で、先に一致した場合は実行されません。
- D誤り。「*)」の処理が実行されるのは、引数が start・run・st で始まる値のいずれにも一致しない場合です。