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)
连续执行用分号 有时候我们想要在命令行下,写下多条命令。这时候该怎么操作呢。如下所示: #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 由此可见,我们只要按照从左到右依次判断即可。注意,如果||或&&前命令没有执行,则当做执行失败来处理。 参考资料:
|