zoukankan      html  css  js  c++  java
  • 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"。

  • 相关阅读:
    407 Trapping Rain Water II 接雨水 II
    406 Queue Reconstruction by Height 根据身高重建队列
    405 Convert a Number to Hexadecimal 数字转换为十六进制数
    404 Sum of Left Leaves 左叶子之和
    403 Frog Jump 青蛙过河
    402 Remove K Digits 移掉K位数字
    401 Binary Watch 二进制手表
    400 Nth Digit 第N个数字
    398 Random Pick Index 随机数索引
    397 Integer Replacement 整数替换
  • 原文地址:https://www.cnblogs.com/chenny7/p/3627747.html
Copyright © 2011-2022 走看看