Shell case esac语句

case … esac

  • case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构。
  • case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。
  • case语句适用于需要进行多重分支的应用情况。

case语句格式如下:

case 值  in
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;
esac

语句特性说明:

  • case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。
  • 值即是 $变量名,取值可以为变量或常数。
  • 匹配发现取值符合某一模式后,其间所有命令开始执行直至双分号“;;”。
  • 双分号“;;”表示命令序列结束,与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。
  • 匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
  • 最后的“)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“)”后的命令序列。

脚本示例:提示输入1到4,与每一种模式进行匹配。

#!/bin/bash

echo "Input a number between 1 to 4"
echo "Your number is:"
read num
case $num in
  1)
  echo "You select 1"
  ;;
  2)
  echo "You select 2"
  ;;
  3)
  echo "You select 3"
  ;;
  4)
  echo "You select 3"
  ;;
  *)
  echo "You do not select a number between 1 to 4"
  ;;
esac

输入不同的内容,会有不同的结果,脚本运行结果:

Input a number between 1 to 4
Your number is:
2
You select 2

读取文本示例如下:

#!/bin/bash

option="${1}"
case ${option} in
  f) FILE="${2}"
  echo "File name is $FILE"
  ;;
  d) DIR="${2}"
  echo "Dir name is $DIR"
  ;;
  *)
  echo "`basename ${0}`:uage: [-f file] | [-d directory]"
  exit
  ;;
esac

脚本运行结果如下:

$./test.sh
test.sh: usage: [ -f filename ] | [ -d directory ]
$ ./test.sh -f index.htm
$ vi test.sh
$ ./test.sh -f index.htm
File name is index.htm
$ ./test.sh -d unix
Dir name is unix
$