case 语句
时间:2019-04-16 23:59:05 来源:igfitidea点击:
case语句可以用于多级if-then-else-fi语句。它也能够将一个变量和多个值进行比较。
语法
case $variable-name in
pattern1)
command1
...
....
commandN
;;
pattern2)
command1
...
....
commandN
;;
patternN)
command1
...
....
commandN
;;
*)
esac
或者
case $variable-name in
pattern1|pattern2|pattern3)
command1
...
....
commandN
;;
pattern4|pattern5|pattern6)
command1
...
....
commandN
;;
pattern7|pattern8|patternN)
command1
...
....
commandN
;;
*)
esac
注意
每个模式pattern 后面有个 右括号)
commandN后面必须有两个分号 ;;
别漏了 esac
示例
#!/bin/bash # 如果没有提供参数 # 那么将租赁物设置为 Unknown if [ -z ] then rental="*** Unknown vehicle ***" elif [ -n ] then # 否则将第一个参数设置为租金物 rental= fi # 使用case语句进行决策 case $rental in "car") echo "For $rental rental is Rs.20 per k/m.";; "van") echo "For $rental rental is Rs.10 per k/m.";; "jeep") echo "For $rental rental is Rs.5 per k/m.";; "bicycle") echo "For $rental rental 20 paisa per k/m.";; "enfield") echo "For $rental rental Rs.3 per k/m.";; "thunderbird") echo "For $rental rental Rs.5 per k/m.";; *) echo "Sorry, I can not get a $rental rental for you!";; esac
在case中使用多个模式
#!/bin/bash NOW=$(date +"%a") case $NOW in Mon) echo "全备";; Tue|Wed|Thu|Fri) echo "增量备份";; Sat|Sun) echo "不做备份";; *) ;; esac
如果我们要使用shell写备份脚本,就可以这样写,很直观
#!/bin/bash
# 一个shell脚本,用于备份mysql, webserver和文件到磁带
opt=
case $opt in
sql)
echo "Running mysql backup using mysqldump tool..."
;;
sync)
echo "Running backup using rsync tool..."
;;
tar)
echo "Running tape backup using tar tool..."
;;
*)
echo "Backup shell script utility"
echo "Usage: echo "TeSt" | tr '[:upper:]' '[:lower:]'
var="TesT"
tr '[:upper:]' '[:lower:]' <<<"$var"
# 所以将 opt= 改成:
opt=$( tr '[:upper:]' '[:lower:]' <<<"" )
{sql|sync|tar}"
echo " sql : Run mySQL backup utility."
echo " sync : Run web server backup utility."
echo " tar : Run tape backup utility." ;;
esac
处理大小写的问题
在上面的例子,我们匹配的是sync,如果用输入的是 Sync将会导致失败。
解决方法1 将模式转换为小写
使用tr命令,可以将shell字符串转换为小写。
例如:
[Ss][Qq][Ll]) ... [Ss][Yy][Nn][Cc]) ... [Tt][Aa][Rr])
解决方法2 在模式中使用正则表达式
将表达式分别改为
#!/bin/bash
# 一个shell脚本,用于备份mysql, webserver和文件到磁带
opt=
# 开启不区分大小写的匹配
shopt -s nocasematch
case $opt in
sql)
echo "Running mysql backup using mysqldump tool..."
;;
sync)
echo "Running backup using rsync tool..."
;;
tar)
echo "Running tape backup using tar tool..."
;;
*)
echo "Backup shell script utility"
echo "Usage: ##代码## {sql|sync|tar}"
echo " sql : Run mySQL backup utility."
echo " sync : Run web server backup utility."
echo " tar : Run tape backup utilty." ;;
esac
# 关闭不区分大小写的匹配
shopt -u nocasematch
解决方法3 匹配时不区分大小写
设置nocasematch选项即可
如何启用nocasematch选项?
执行shopt -s nocasematch即可。
如何关闭nocasematch选项?
执行shopt -u nocasematch即可。
所以我们的脚本可以改成:
##代码##
