쉘 스크립트에서 여러 문자열 비교

쉘 스크립트에서 여러 문자열 비교

아래와 같이 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

스크립트에는 두 가지 주요 문제가 있습니다.

  1. 성명서 case는 에 의해 종료되지 않았습니다 esac.
  2. ||대부분의 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

관련 정보