【shell漫步】3 条件分支结构

8 篇文章 0 订阅
3 篇文章 0 订阅

碎碎念

接上文的运算符的内容,这一章终于开始接触控制结构

【shell漫步】2 运算符-CSDN博客

分支结构的写法

当我们要对不同情况采取不同措施的时候就要用到分支结构

在shell中分支结构的写法如下

if [ 情况1 ]
then
    代码1
elif [ 情况2 ]
then
    代码2
elif [ 情况3 ]
then
    代码3
...以此类推
fi

接下来以收快递为例子来解释一下语法结构,假如我有一个邮政快递,我这样子告诉快递员:

如果我在家,则放我家门口,那么代码这样:(其中 if 后面跟着情况或者条件,then后面跟着在这种情况下对应的代码,在条件分支的最后一行一定要用 fi 作为结束的标志)

if 我在家
then
    放家门口
fi

但是我一想,如果我在上班的话怎么办,于是我又跟快递员补充一句:

如果我不在家,帮我送到我的公司来,从第二个条件开始就不写 if 而是 elif 作为开头

那么代码如下

if 我在家
then
    放家门口
elif 我不在家
then
    放公司
fi

如果有第三个条件,第四个条件,第五个条件....

他们的写法都是和第二个条件的写法一样

elif 条件 then 代码  就可以了

如果以上条件都不满足的话,默认就不执行任何操作,快递员将不会派送这个包裹,但是如果我们要指定默认操作的话,可以使用else

if 我在家
then
    放家门口
elif 我不在家
then
    放公司
else
then
    放快递点
fi

这就表明了,不管我前面指定了1种情形或者100种情形,只要不满足前面的任何一种情形的话,就帮我执行 else 这个分支的动作就行了

条件的写法

在shell中,条件的写法比较麻烦,有四种写法

[ 条件 ]      [[ 条件 ]]   ( 条件 )   (( 条件 ))

写法1  if [ 条件 ]

最基础的写法,可以在里面使用关系运算,布尔运算,字符串运算

除此之外算术运算符,逻辑运算符 以及高级用法都不行

但是在 if 和括号之间,括号和条件之间一定要有空格!否则会报错

如下,逻辑运算符  ||  就报错了 

写法2 if [[ 条件 ]]

和写法1相比,写法2可以支持 关系运算符,布尔运算符,逻辑运算符,正则表达式

可以看到逻辑运算符被正确识别了,而且还支持高级功能比如正则表达式,字符串匹配等,目前还没接触正则表达式也完全不用慌,正则表达式在不同的命令中使用不同的方式使用,遇到具体的命令的时候去查怎么使用就可以了(比如百度一下  grep  中怎么用正则表达式就可以了)现在重要的是理解写法2 可以使用高级功能,也就是说如果不确定使用哪一种写法的时候使用写法2更安全

正则表达式速攻1/2-CSDN博客

写法3  if ( 条件 )

小括号中的条件是一条命令,比如常见的 mkdir ,touch 等

每一个命令执行之后都会有两种结果,成功或者失败

只要成功的话都会返回一个 0 作为成功的信号

因此我们就可以根据  命令是否成功  这一标志作为条件

比如说: 如果touch命令执行成功的话,打印“命令执行成功”的信息

那么代码就是这样的

if ( touch newfile )
then
    echo "命令执行成功"
else
    echo "命令执行失败"
fi

写法4  if (( 条件 ))

写法2中哪怕支持了很多的运算符和高级的字符串匹配等功能,仍然还是没有处理计算的能力

如果一定要处理数学计算的话,就要使用双重小括号的写法,在双重小括号中可以使用熟悉的数学表达法,比如 ==    <    >    <=     >=     +      -      *      /  等

但是注意,双重小括号能够支持算术运算,反而不支持关系运算,这两个运算就跟老冤家一样(晕)

最后想总结一下四种条件的写法

算术运算关系运算字符串运算逻辑运算其他操作
[    ]
[[     ]]字符串匹配
(    )执行命令的结果
((    ))

并且布尔运算目前只有取反功能还在使用,取反功能是大家都支持的所以就不写了

顺便回忆一下之前的一个内容:在shell中 0 代表true,代表成功,1代表false,代表失败

所以 if ( 命令 )的写法中

一旦命令执行成功一定会返回0,而 if 判断 0 为真,所以执行下面的代码

ps  手头可以写代码的话可以尝试写一下 if 0   或者先设 a=0 然后写一下  if $a

按照上面说的,if 收到命令成功后返回的 0  值,就会判定为true,然后执行代码

既然如此,直接写 if 0 会不会也判定为true然后执行代码? 如果不能的话是为什么?

这也是个很有趣的解密游戏

祝大家玩得开心

  • 32
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值