shell的执行顺序问题

&&,||,(),{},& 五个符号的运用

shell脚本执行命令的时候,有时候会依赖于前一个命令是否执行成功。而&&和||就是用来判断前一个命令执行效果的。

1  &&
   使用方法:cmd1 &&  cmd2
   这个方式简单明了,cmd1如果返回结果为真(即执行返回为0,成功执行)后,cmd2才被执行
   换句话说,如果cmd1执行成功&&那么执行cmd2
   这里有个命令
   [ -f /home/dellogs.sh ] && echo "清除日至脚本存在"
   总之,&&符号代表如果第一个命令执行成功才执行第二个命令。
2  ||
   使用方法:cmd1 ||cmd令2
   ||命令,cmd1没有执行成功则执行cmd2
   如简单例子
   cp wopper.txt oop.txt || echo "cp命令执行没有成功"
   如果||左边的命令没有执行成功,则屏幕中除显示“cp命令执行没有成功”
   下面给出一个更为实用的例子,
   awk ‘{print$1,$5}’ acc.qrt >qtr.tmp || 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"。

原文地址:https://www.cnblogs.com/chenny7/p/3627747.html