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