比较 shell 脚本中的多个字符串

比较 shell 脚本中的多个字符串

我正在比较 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. 第三个模式包含||which 是大多数类似 Bourne 的 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"

测试它:

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

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

$ ./script.sh BOO
error

相关内容