Bash编程004——条件语句2
[[ ]]的使用
[[ ]]是bash中的关键字,相当于new test,也是用于计算表达式的值,但是具有更加强大的功能。
简单来说,test([ ])实现了老的可移植的语法特性。几乎所有的shell总都支持它,而[[ ]]是一个新的关键字(不是builtin)。在shell中[ ]和[[ ]]基本功能有很多相似之处,不同在于[[ ]]提供了更多方便使用的特性。
比如字符串比较,在[ ]中 < 和 >会被解释为重定向输入输出,要想使用比较的功能需要使用\转义,而在[[ ]]可以直接使用。
[[ ]]中可以直接使用&&(条件与)和||(条件或)连接多个条件表达式。
注:这里的&&和||也是类似于C语言中的短路求值,当第一个表达式可以确定最终的值得时候,就不会计算第二个表达式的值。
示例:
[[ 2 > 1 && 3 > 2 ]]; echo $?
# 输出为:0
[[ 2 > 1 && 3 > 4 ]] ; echo $?
# 输出为:1
[[ 2 > 1 || 3 > 4 ]] ; echo $?
# 输出为:0
另一个微妙的区别在于[[ ]]内不存在单词分割或者通配符展开,这样在对某些变量进行判断时就不需要用引号引用了。
举例:
touch hello\ world.txt
var=hello\ world.txt
[ $var = "hello" ]; echo $?
#输出结果:bash: [: 参数太多 2
[ "$var" = "hello world.txt" ]; echo $?
#输出结果:1
[[ "$var" = "hello world.txt" ]]; echo $?
#输出结果:1
if条件语句
bash中的if条件语句和一般的编程语言没有太大区别,基本语法如下:
if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi
首先执行if中的命令,如果退出状态为0,则这行then后的命令,然后终止;否则依次执行elif后的命令(elif 执行完后还未终止,则执行else后的命令),直到退出状态为0,终止命令。
示例:
var="hello"
if [[ $var = "hell" ]];
then
echo "var is hell";
elif [[ $var = "world" ]]
then
echo "var is world";
elif [[ $var = "hello" ]]
then
echo "var is hello";
else
echo "var is ";
fi
# 输出结果为:var is hello
多条件判断语句case
case语句专门用于处理多分支结构的情况。case采取了模式匹配处理不同的情况。
语法如下:
case exp in
case)
commands ;;
case)
commands ;;
...
case)
commands ;;
*)
commands ;;
esac
示例:
num=100ab
case $num in
[1-9]ab*)
echo "case 1";;
[1-9][1-9]ab*)
echo "case 2";;
[1-9][0-9][0-9]ab*)
echo "case 3";;
*)
echo "case *";;
esac
# 输出结果:case 3
其中方括号代表匹配其中的任一字符,连接字符表示的是两个字符之间的所有字符(包含左右端点),*代表匹配任意长度的字符串。所以,最后的*)语句代表处理剩余的所有情况,类似于C语言中的default。
网友评论