Linux学习笔记:Shell Script && ||

返回值

在说&&和||之前,不得不提下返回值。
shell中,一个命令如果成功执行会返回0,返回值会保存在变量$?中,可以通过echo $?查看,但需注意的是,该命令也会返回0,如:

[light@localhost ~]$ lq
bash: lq: 未找到命令...
[light@localhost ~]$ echo $?
127
[light@localhost ~]$ echo $?
0

这里先给出了一个不存在的命令,执行后返回127,我们用echo $?查看该返回值,这时返回值就变成了0.

&&

有编程基础的同学都知道,这是与操作,而且是短路操作。真值表如下:

aba&&b

通过它我们可以看到,当a为假时,a&&b一定为假。所以程序在执行时如果判定a为假,就直接返回假,不再判定b。也就是说,当且仅当a为真时,才判定b
而在shell中,命令成功执行返回0,这里0就是真,非0就是假。
我们用test命令去判断文件是否存在或具有相应的权限,现假设当前目录下只有hello一个文件,分别执行如下命令会显示什么?

test -e 用来判断是否存在该名称的文件或目录,若存在返回0,否则返回1

test -e hello  && echo "exist" 
test -e hello1 && echo "exist"

对于第一条,当执行完test -e hello后,$?的值为0,为真, 继续执行后面的,故显示exist。
第二条,执行完test -e hello1后,由于hello1不存在,返回1,为假,故不再执行后面的echo exist,无显示。

||

或操作,只要有一个为真则结果为真,故也是短路操作,只要第一个操作数为真就不再执行后面的操作。
真值表

aba||b

假设当前目录下只存在文件hello:

test -e hello  || echo "not exist" 
test -e hello1 || echo "not exist"

结果如下:

[light@localhost ~]$ test -e hello  || echo "not exist"
[light@localhost ~]$ test -e hello1 || echo "not exist"
not exist

结合上述两个命令,就能实现如下功能啦:
给定一个文件,若文件存在,显示exist,否则显示not exist

test -e hello && echo "exist" || echo "not exist"

linux下这两个操作符的优先级似乎是一样的,所以这里也是从左向右执行。即,先判定出test -e hello && echo "exist"再拿这个结果去和后面的部分执行或操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值