105.2基礎
$1がstartなら起動、stopなら停止、それ以外なら使用法を表示する。
適切なcase文はどれか。
× 不正解
case WORD in PATTERN) ... ;; esacは値を複数のパターンへ順に照合する。*を最後に置くと既知でない値を扱える。
詳細解説
誤り
case $1 { start: run_start; stop: run_stop; *: usage; }C言語風の波括弧とコロンはシェルcaseの構文ではない。
誤り。シェルのcaseは波括弧とコロンではなく、in、パターン)、節終端;;、esacを使用する。
正しい
case "$1" in start) run_start ;; stop) run_stop ;; *) usage ;; esacin、パターン)、;;、esacで各分岐を正しく記述する。
正しい。$1をstart、stop、最後の*へ順に照合し、最初に一致した節のコマンドを実行する。
誤り
if "$1" in start|stop; then run; fiifにinをこの形で続ける構文はなく、動作も起動と停止を分けない。
誤り。ifは後続コマンドの終了状態を評価する構文で、この位置にinやパターン選択を書く形式はない。
誤り
case "$1" then start run_start else usage ficaseとifのキーワードを混在させた無効な構文である。
誤り。then、else、fiはif用のキーワードであり、case節の区切りや終端として使用できない。
実際に確かめる
一時的な検証環境で実行できる例です。
bash --noprofile --norc -c 'case "$1" in start) printf start ;; stop) printf stop ;; *) printf usage ;; esac' demo stop期待される結果
stop理解のポイント
- inでパターン開始
- )でパターン終了
- ;;で節終了
- esacで閉じる
確認時の注意
- 確認環境: GNU Bash 5.2 / 短命シェル
基礎のおさらい
パターン
caseのパターンには*、?、[...]等を使え、|で複数パターンを1節へまとめられる。
既定節
*は任意文字列へ一致するため、通常は最後に置いて未知の値やusage表示を扱う。
問題IDKP-105-631
確認環境GNU Bash 5.2 / 短命シェル
最終技術確認2026-08-13
誤り・権利侵害を報告