结构
case param in
value1)
statement1
...
;;
value2)
statement2
...
;;
...)
...
;;
esac
head:case param in统一模式的头,param为变量名match:value,分支选择标记statement:具体操作语句,不限数量tail:;;,分支操作结束标记,不用break,自动跳出over:esac,case反拼
特殊
- 对比
case和高级语言中的switch-case没有太大的区别,具体列举如下。
position |
switch |
case |
de ion |
|---|---|---|---|
| 头部 | switch |
case |
关键字不同 语法不同 in |
| 分支 | case |
value |
case直接通过value选择分支 |
| 操作 | statement |
statement |
无区别 |
| 分支结束 | break |
;; |
switch可以多分支共用同一语句,或者break跳出单独使用case的;;默认跳出和结束,不用break |
| 默认 | default |
*) |
语法标记不同 |
| 结束符 | } |
esac |
switch更多使用{}囊括代码块case强制esac结束 |
- 特色
case中的value和switch的最大区别,并不是结构上的差异,而在于匹配的方式不同。
switch语句中的match仅仅是单一的值匹配,case更倾向于模式匹配。
#!/bin/bash
case $1 in
[0-9])
echo \"number\"
;;
[a-z])
echo \"lowercase alpha\"
;;
[A-Z])
echo \"uppercase alpha\"
;;
*)
echo \"special character\"
;;
esac
值得注意的是,这种方式并不是
正则匹配,它是shell的通配符匹配。#!/bin/bash case $1 in [:alpha:]) echo \"alpha\" ;; *) echo \"other\" ;; esac所以呢,想在脚本中去进行复杂的模式匹配,先要精修一下
通配符。不是
正则表达式,这点需要记住,别 到时候查错了手册就尴尬了。
脚本
- 四则
#!/bin/bash
if [ $# -ne 3 ];then
echo -e \"param length error\\nexample 1 + 2\"
exit 2
fi
case $2 in
+)
echo $(($1 + $3))
;;
-)
echo $(($1 - $3))
;;
x)
echo $(($1 * $3))
;;
/)
echo $(($1 / $3))
;;
*)
echo \"unknow calc type : $2\"
;;
esac
继续阅读与本文标签相同的文章
-
阿里云数据库RDS通用型和独享型区别在哪?如何选择?
2026-05-18栏目: 教程
-
如何选购配置云数据库RDS MySQL 的流程 新手必看
2026-05-18栏目: 教程
-
跨境电商女装开发风向标
2026-05-18栏目: 教程
-
线上线下场景全方面打通,小程序成为家居行业的新卖点!
2026-05-18栏目: 教程
-
下载一款手机软件后,为何总是要让我们授权一些,看似毫无关联的权限?
2026-05-18栏目: 教程
