bash shell基本语法之控制语句

前言

shell中也可以使用类似其它语言的if-else、switch-case等分支语句,虽然和其它语言在语法上存在一定区别,但是语义上差不多。下面对其控制语句的写法做一个示例说明。

关于分支使用的逻辑表达的语法在bash shell基本语法之逻辑表达式有说明。

控制语句写法示例

if语句

只有一个分支:if-then

语法:

if 逻辑表达结果为true;then

    执行相关操作

fi

p.s.:then关键字如果不重新写一行,记得前面加那个分号(;)

示例:

#! /bin/bash

if [ 2 -gt 1 ];then
        echo "2 > 1"
fi

两个分支:if-then-else

写法:

if 表达式为真;then

    执行表达1

else

    执行表达式2

fi

示例:

if [ 2 -lt 1 ];then
        echo "2 < 1"
else
        echo "2 > 1"
fi

多个分支:if-then-elif-...-else

写法:

if 表达式1为真;then

    执行操作1

elif 表达式2为真;then

    执行操作2

elif 表达式3为真;then

    执行操作3

.......可以有多个elif

else

     前面条件都不满足,执行这个操作

fi

最后的else也可以不要,这样的话,如果条件都不满足,就都不执行。

示例:

#! /bin/bash

number=$1
if [ "x$number" = "x" ];then
        echo "number is null"
elif [ $number -eq 1 ];then
        echo "number is 1"
elif [ $number -eq 2 ];then
        echo "number is 2"
elif [ $number -eq 3 ];then
        echo "number is 3"
else
        echo "number is unknown"
fi

示例中$1是位置参数,需要了解可以看bash shell基本语法之特殊变量的使用

case语句

多个会支条件的时候,可以使用case语法,语义上很类似C或java的switch case,但是感觉更强大点,同样,它的匹配条件也不算是表达式,而是匹配否个值是否相等(存在)

写法:

case 变量 in

    匹配条件1)

        执行操作1;;

    匹配条件2)

        执行操作2;;

    *)

        都不匹配,执行的操作;;

esac

注意上面的写法,每个匹配条件后面跟一个),另外,每个执行的代码后面有两个分号,类似于c/java的break。当然,在bash的的帮助文档上,这两个分号";;",可以换成";&"或者";;&“,有其它作用,下面文档上的说明:

 If the ;; operator is used, no subsequent matches are attempted after the
              first  pattern  match.  Using ;& in place of ;; causes execution to continue with the list associated with the
              next set of patterns.  Using ;;& in place of ;; causes the shell to test the next pattern list in  the  state‐
              ment,  if  any,  and execute any associated list on a successful match. 

有兴趣的可以试一下,最后的*),就是前面的条件都不匹配的时候执行的(default)。

现在写一个这个匹配条件的几种写法(并不全),随便看下,心里有个数:

#! /bin/bash

case $1 in
        1)
                echo "input is 1";;
        2)
                echo "input is 2";;
        'a')
                echo "input is a";;
        'b'|'c')
                echo "input is b|c";;
        [A-Z])
                echo "input is [A-Z]";;
        *)
                echo "unknown input";;

esac

执行结果:

p.s. :匹配条件可以是一个字符串或者多个字符串,不一定只是一个字符,示例中都是一个字符。

其实case+shift很适合解析参数选项,后面的博文如果写shift的时候,会写一个示例。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不识君的荒漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值