- Unix/Linux 初学者教程
- Unix/Linux - 首页
- Unix/Linux - 什么是Linux?
- Unix/Linux - 入门指南
- Unix/Linux - 文件管理
- Unix/Linux - 目录
- Unix/Linux - 文件权限
- Unix/Linux - 环境变量
- Unix/Linux - 基本工具
- Unix/Linux - 管道与过滤器
- Unix/Linux - 进程
- Unix/Linux - 通信
- Unix/Linux - vi 编辑器
- Unix/Linux Shell 编程
- Unix/Linux - Shell 脚本
- Unix/Linux - 什么是Shell?
- Unix/Linux - 使用变量
- Unix/Linux - 特殊变量
- Unix/Linux - 使用数组
- Unix/Linux - 基本运算符
- Unix/Linux - 决策语句
- Unix/Linux - Shell 循环
- Unix/Linux - 循环控制
- Unix/Linux - Shell 替换
- Unix/Linux - 引号机制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函数
- Unix/Linux - 手册页帮助
- 高级 Unix/Linux
- Unix/Linux - 标准 I/O 流
- Unix/Linux - 文件链接
- Unix/Linux - 正则表达式
- Unix/Linux - 文件系统基础
- Unix/Linux - 用户管理
- Unix/Linux - 系统性能
- Unix/Linux - 系统日志
- Unix/Linux - 信号和陷阱
Unix/Linux Shell - case...esac 语句
您可以使用多个if...elif语句来执行多路分支。但是,这并非总是最佳解决方案,尤其是在所有分支都依赖于单个变量的值时。
Shell 支持case...esac语句,它可以精确处理这种情况,并且比重复使用if...elif语句效率更高。
语法
case...esac语句的基本语法是给出一个表达式进行评估,并根据表达式的值执行几个不同的语句。
解释器会将每个case与表达式的值进行比较,直到找到匹配项。如果没有匹配项,则将使用默认条件。
case word in pattern1) Statement(s) to be executed if pattern1 matches ;; pattern2) Statement(s) to be executed if pattern2 matches ;; pattern3) Statement(s) to be executed if pattern3 matches ;; *) Default condition to be executed ;; esac
这里将字符串word与每个模式进行比较,直到找到匹配项。匹配模式后的语句将执行。如果找不到匹配项,则case语句将退出而不执行任何操作。
模式的数量没有最大限制,但最小值为一个。
当语句部分执行时,命令;;
表示程序流程应该跳转到整个case语句的末尾。这类似于C编程语言中的break。
示例
#!/bin/sh FRUIT="kiwi" case "$FRUIT" in "apple") echo "Apple pie is quite tasty." ;; "banana") echo "I like banana nut bread." ;; "kiwi") echo "New Zealand is famous for kiwi." ;; esac
执行后,您将收到以下结果:
New Zealand is famous for kiwi.
case语句的一个好用途是评估命令行参数,如下所示:
#!/bin/sh option="${1}" case ${option} in -f) FILE="${2}" echo "File name is $FILE" ;; -d) DIR="${2}" echo "Dir name is $DIR" ;; *) echo "`basename ${0}`:usage: [-f file] | [-d directory]" exit 1 # Command to come out of the program with status 1 ;; 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 $
unix-decision-making.htm
广告