当前位置: > shell编程 >

Linux shell 命令判断执行语法 ; , && , ||

时间:2015-05-18 01:02来源:linux.it.net.cn 作者:IT
  • 连续执行用分号
  • 通过变量$?来判断执行
  • 快捷判断语法&& 和 ||

连续执行用分号

有时候我们想要在命令行下,写下多条命令。这时候该怎么操作呢。如下所示:

#ls /tmp/xxxx ; echo '/tmp/xxxx'
ls: /tmp/xxxx: No such file or directory
/tmp/xxxx

一般/tmp/目录下,不会有xxxx文件。这个文件我瞎写的,主要用来展示没成功执行。
但是上面只考虑了连续执行,如果第一条命令失败了,第二条依旧会执行,即命令之间没有相关性,如何使得第一条命令执行成功才执行第二条命令,或者反过来,第一条命令执行失败才执行第二条命令呢。

通过变量$?来判断执行

// 没有成功执行前一条命令时,$?输出1
# ls /tmp/xxxx ; echo $?
ls: /tmp/xxxx: No such file or directory
1

// 新建一个xxxx文件
# touch /tmp/xxxx

// 成功执行前一条命令时,$?输出0
# ls /tmp/xxxx ; echo $?
/tmp/xxxx
0

如果成功执行命令,$?变量会被赋值为0,反之,赋值为-1。通过判断$?变量的方式确实可以满足我们的要求,但是需要用if判断,要写脚本,比较繁琐,有没有比较方便的命令呢。哈,肯定有的噻。

shell中还提供了快捷操作符: && 和 ||

// 此时存在/tmp/xxxx文件,执行了&&后面的命令
# ls /tmp/xxxx && echo '/tmp/xxxx exits'
/tmp/xxxx
/tmp/xxxx exits

// 此时存在/tmp/xxxx文件,不执行 || 后面的命令
# ls /tmp/xxxx || echo '/tmp/xxxx exits'
/tmp/xxxx

我们对上例可以这么分析,&& 签名的命令执行成功就执行后面的命令,|| 前面的命令执行失败才执行后面的命令。

那么多个&&, || 同时出现时,执行顺序是怎么样的呢?

以下例子用以判断/tmp/aaaa是否存在,并输出结果

# ls /tmp/aaaa && echo "exist" || echo "not exist"
ls: /tmp/aaaa: No such file or directory
not exist

# touch /tmp/aaaa

# ls /tmp/aaaa && echo "exist" || echo "not exist"
/tmp/aaaa
exist

由此可见,我们只要按照从左到右依次判断即可。注意,如果||或&&前命令没有执行,则当做执行失败来处理。

参考资料:

  • 命令运行的判断依据: ; , &&, ||
(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容