以下のように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つの主な問題があります。
- 声明
case
はによって終了されませんでしたesac
。 ||
ほとんどの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