shell的执⾏顺序问题
&&,||,(),{},& 五个符号的运⽤
shell脚本执⾏命令的时候,有时候会依赖于前⼀个命令是否执⾏成功。⽽&&和||就是⽤来判断前⼀个命令执⾏效果的。
1  &&
使⽤⽅法:cmd1 &&  cmd2
这个⽅式简单明了,cmd1如果返回结果为真(即执⾏返回为0,成功执⾏)后,cmd2才被执⾏
换句话说,如果cmd1执⾏成功&&那么执⾏cmd2
这⾥有个命令
[ -f /home/dellogs.sh ] && echo "清除⽇⾄脚本存在"
总之,&&符号代表如果第⼀个命令执⾏成功才执⾏第⼆个命令。
2  ||
使⽤⽅法:cmd1 ||cmd令2shell脚本返回执行结果
||命令,cmd1没有执⾏成功则执⾏cmd2
如简单例⼦
|| echo "cp命令执⾏没有成功"
如果||左边的命令没有执⾏成功,则屏幕中除显⽰“cp命令执⾏没有成功”
下⾯给出⼀个更为实⽤的例⼦,
awk ‘{print$1,$5}’ acc.qrt &p || echo "sorry the payroll(薪⽔) extraction(抽取) did'not work" | mail root
实现shell的三元操作符:
cmd1 && cmd2 || cmd3
如果cmd1执⾏成功,则执⾏cmd2,否则执⾏cmd3
3 除了使⽤&&和||这两⽅法外,还可以⽤(),{}这两个符号把命令连接起来
()和{}存在的⽬的只是为了,能⼀个shell或⼦shell中执⾏⼀组命令
使⽤⽅法(cmd1;cmd2;cmd3;...)和{cmd1;cmd2;cmd3;...}
这种情况⽐较少遇到,⼀般要和&&,||两个命令⼀起使⽤。
例如
comet monthent || (echo “Hello,quess what! comet did not work”| mail root;exit)
4、使⽤&可以将⼀个命令放在后台运⾏,从⽽使shell脚本能够继续往⾛执⾏;
for ((i=0;i<10;i++));do
  sleep 5 &
done
echo "done"
上⾯的脚本执⾏后会⽴即打印出"done",sleep命令被扔给后台执⾏,不会阻塞脚本执⾏。
如果想要在进⼊下个循环前,必须等待上个后台命令执⾏完毕,可以使⽤wait命令:
for ((i=0;i<10;i++));do
  sleep 5 &
  wait
done
echo "done"
这样,需要等待50s后才能在屏幕上看到"done"。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。