简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
这篇文章讲述一下 case 条件分支语句。在多分支条件判定的场景中,可以使用 if 条件分支语句来编写脚本,但可能看上去不那么优雅,这时候可以考虑使用 case 条件分支语句。
为方便讲述,先虚构这么一个场景:程序在和用户交互时,程序要根据用户的输入在终端进行相应的输出。
当用户输入是 1 时,程序在终端输出 1 ;
当用户输入是 2 时,程序在终端输出 2 ;
当用户输入是 3 时,程序在终端输出 3 ;
当用户的输入不是 1 不是 2 也不是 3 时,程序在终端输出 You did not enter a number between 1 and 3.
如果使用 if 条件分支语句,脚本如下:
#!/bin/bash
echo -n "Enter a number between 1 and 3 inclusive > "
read character
if [ "$character" = "1" ]; then
echo "You entered one."
elif [ "$character" = "2" ]; then
echo "You entered two."
elif [ "$character" = "3" ]; then
echo "You entered three."
else
echo "You did not enter a number between 1 and 3."
fi
上面的这种写法完全可以实现我们需要的功能,但看上去 if... elif... else... 的使用次数较多,代码显得臃肿,这时候如果我们选择使用 case 条件分支语句,脚本如下:
#!/bin/bash
echo -n "Enter a number between 1 and 3 inclusive > "
read character
case $character in
1 ) echo "You entered one."
;;
2 ) echo "You entered two."
;;
3 ) echo "You entered three."
;;
* ) echo "You did not enter a number between 1 and 3."
esac
这段脚本实现了和第一个脚本同样的功能,但看上去清爽了很多。这就是 case 条件分支语句的作用。
接下来简单介绍一下 case 条件分支语句的使用方法:
case word in
pattern1 ) command1 ;;
pattern2 ) command2 ;;
...
patternn ) commandn ;;
esac
脚本在执行时会将 word 的形式与下面第 1 个到第 n 个 pattern 的模式进行匹配,如果匹配成功则执行相应 pattern 后面的命令,并且不再尝试与后续的 pattern 进行模式匹配。比如 word 的模式与第 2 个 pattern 的模式相匹配,那么程序将执行第二个 pattern 后面的命令,这时即便 word 和第 2 个 pattern 后面的某个 pattern 相匹配,程序也不会做任何动作了。
这里有两点需要注意:
1、patterns 是 Shell 中的正则表达式,与 java 或 python 中的正则表达式是有区别的。要想知道更多关于 Shell 正则表达式的知识,可以自己搜索相关的教程;
2、注意两个分号的使用,如果只用一个分号会报错。
在知道了 case 条件分支语句的使用方法后,再来展示一个稍稍复杂点的例子:
(1)当用户输入的是单个字母时,程序在终端输出 You typed the letter
(2)当用户输入的是单个数字时,程序在终端输出 You typed the digit
(3)当用户输入其他内容时,程序在终端输出 You did not type a letter or a digit
实现该功能的脚本如下:
#!/bin/bash
echo -n "Type a digit or a letter > "
read character
case $character in
# Check for letters
[[:lower:]] | [[:upper:]] ) echo "You typed the letter"
;;
# Check for digits
[0-9] ) echo "You typed the digit"
;;
# Check for anything else
* ) echo "You did not type a letter or a digit"
esac
这段脚本也很简单,如果读者在看这段代码时感觉有困难,可能是看不太明白正则表达式部分。不过没有关系,因为你只需要知道这里是在讲述 case 条件分支语句的使用方法,只要知道了这些这里就达到了知识分享的目的。如果真的很想弄明白 Shell 中的正则表达式,还是那句话,可以自己搜索相关教程来学习。
相关文档
http://linuxcommand.org/lc3_wss0110.php
上一篇:Shell Script(五):交互和算数运算
下一篇:Shell Script(七):循环(for, while, until)
网友评论