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"。

  • 相关阅读:
    Qt开发陷阱一QSTACKWIDGET
    【解决】安装compass失败(gem install compass)
    Qt使用MySQL笔记一
    win7双系统安装openSUSE13.2解决【引导加载器安装期间出错】问题
    【转载】Sublime Text 3065 Keygen and Patcher
    HTML4,HTML5,XHTML 之间有什么区别?
    【转】实例解说双缓冲
    【MFC】利用双缓冲和随机函数rand()实现蒲公英飞舞
    基本sql语句--入门语句
    Linux使用jstat命令查看jvm的GC情况
  • 原文地址:https://www.cnblogs.com/chenny7/p/3627747.html
Copyright © 2011-2022 走看看