過去問ドリル

LinuCレベル1 シェルおよびスクリプト 問21

シェルおよびスクリプト/シェルスクリプト

次の内容のシェルスクリプト svc.sh を「bash svc.sh start」として実行したときの出力として適切なものはどれか。 case "$1" in start|run) echo "A" ;; st*) echo "B" ;; *) echo "C" ;; esac

当サイトのオリジナル問題(LinuCレベル1の出題範囲「シェルおよびスクリプト」に対応。実際の試験問題ではありません)

正解:A

解説

case文は、値を上から順にパターンと照合し、最初に一致したパターンの処理だけを実行します。「;;」はその処理の終わりを表し、以降のパターンは照合されずにesacの後へ進みます。「start」は1つ目のパターン start|run(「|」はいずれかに一致)に一致するため、Aだけが表示されます。「st*」にも一致しますが、先に一致したパターンがあるので実行されません。どのパターンにも一致しない値を受ける既定の処理は、最後に「*)」で書くのが定石です。

選択肢ごとの解説

  • A正しい。最初に一致した start|run の処理だけが実行され、「;;」でcase文を抜けます。
  • B誤り。「;;」で終わる処理の後は次のパターンへ進まないため、st* の処理は実行されません。
  • C誤り。「*)」はどのパターンにも一致しなかった場合の受け皿で、先に一致した場合は実行されません。
  • D誤り。「*)」の処理が実行されるのは、引数が start・run・st で始まる値のいずれにも一致しない場合です。
LinuCレベル1の問題を演習モードで解く