看啥推荐读物
专栏名称: 若梦儿
BUPT计科大三蒟蒻,希望和各位大佬奆奆们多多交流
今天看啥  ›  专栏  ›  若梦儿

Bash编程004——条件语句2

若梦儿  · 简书  ·  · 2018-12-26 18:09

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。




原文地址:访问原文地址
快照地址: 访问文章快照