有时候我们需要执行一系列操作, 每一步需要上一步执行成功后才会执行下一步否则就退出整个脚本, 直接举个栗子:
wget https://getcomposer.org/installer || ( echo "failed"; exit ) && php composer-setup.php && rm -r composer-setup.php && echo "install oj8k"
这里是其他的shell命令
解释:
'&&': 顺序执行执行作用 如a && b, a成功后才会执行b, 否则b不会执行
'||': 如a||b a执行失败才会执行b,a 成功了就不会执行b了
';' : 两条shell要使用逗号隔开
(): 为了将多条命令当作一个整体看, 如例子中 ( echo "failed"; exit ) 如果wget执行失败会执行echo 和 exit退出脚本这两个动作, 一定要加上(), 不然exit会被当成独立的语句,所以无论怎么都会被执行到, 这就违背了我们的意图了
以上命令所做事情的描述:
wget 下载内容如果下载失败那么就 执行括号中echo 和 exit 退出当前脚本命令; 如果下载成功那么就执行php composer-setup.php, 该命令成功就继续执行rm -r composer-setup.php, 如果失败那么rm -r composer-setup.php 和 echo "install oj8k"都不会被执行,然后执行下面的其他shell语句
附加: 有时候我们没有办法全部写在一句中, 那么$?获取都上一个命令的执行结果, 为此我们可以像如下做
这里是shell命令...
[ $? -eq 0 ] || (echo "上个命令执行失败,退出"; exit) && 继续其他命令