在 shell 脚本的情况下比较多个字符串

TKH*_*KHN -2 string shell-script case

我正在比较 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
Run Code Online (Sandbox Code Playgroud)

输入变量不打印任何东西..

Kus*_*nda 5

您的脚本中有两个主要问题:

  1. case语句不是由 关闭的esac
  2. 第三个模式包含||which 是大多数 Bourne-like shell 中的语法错误(使用''or""或解析为空值以可移植地匹配空字符串的扩展)

不清楚你的脚本实际上在做什么,所以我推测了一下并写了这个:

#!/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"
Run Code Online (Sandbox Code Playgroud)

测试它:

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

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

$ ./script.sh BOO
error
Run Code Online (Sandbox Code Playgroud)