シェルスクリプトで複数の文字列を比較する

シェルスクリプトで複数の文字列を比較する

以下のようにCase文の文字列を比較しています。入力変数はDP KLです。

case $input in
      D|P|Q|L1|L2)
         val="Hello";;
      DD|DE|DF|CA)
          val="Hi" ;;
      MM|KL||TK|SZ)
         val="Bye" ;;
         echo $input

入力変数は何も印刷しません。

答え1

スクリプトには2つの主な問題があります。

  1. 声明caseはによって終了されませんでしたesac
  2. ||ほとんどのBourne様シェルで構文エラーを含む3番目の''パターン""

あなたのスクリプトが実際に何をしているのかわからないので、少し推測して次のように書きました。

#!/bin/sh

input="$1"

case "$input" in
      D|P|Q|L1|L2)
          val='Hello' ;;
      DD|DE|DF|CA)
          val='Hi' ;;
      MM|KL|""|TK|SZ)
          val='Bye' ;;
      *)
          echo 'error' >&2
          exit 1
esac

printf 'input was "%s", val is "%s"\n' "$input" "$val"

テストしてみてください:

$ ./script.sh D
input was "D", val is "Hello"

$ ./script.sh MM
input was "MM", val is "Bye"

$ ./script.sh BOO
error

関連情報