아래와 같이 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
스크립트에는 두 가지 주요 문제가 있습니다.
- 성명서
case
는 에 의해 종료되지 않았습니다esac
. ||
대부분의 Bourne 유사 쉘에서 구문 오류가 포함된 세 번째 패턴 ( 빈 문자열을 휴대용으로 일치시키기 위해 또는 null로 구문 분석 확장을''
사용 )""
귀하의 스크립트가 실제로 무엇을 하고 있는지 확실하지 않으므로 약간 추측하여 다음과 같이 썼습니다.
#!/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