精华内容
参与话题
问答
  • shell脚本顺序执行另几条shell命令

    万次阅读 2013-07-23 14:06:09
    它们可以从左到右顺序执行。此时,各条命令之间应以分号( ;)隔开. 如:  pwd ; who | wc -l ; cd /usr/bin 在相邻命令间可存在逻辑关系,即逻辑“与”和逻辑“或”。 逻辑与操作符“&&”; 其一般...

     命令执行操作符

    多条命令可以在一行中出现。它们可以从左到右顺序执行。此时,各条命令之间应以分号( ;)隔开.
    如:
       pwd ; who | wc -l ; cd /usr/bin

    在相邻命令间可存在逻辑关系,即逻辑“与”和逻辑“或”。

    逻辑与操作符“&&”;
    其一般形式:   命令1 && 命令2

    其功能是先执行命令1,如果执行成功,才执行命令2;否则,若命令1执行不成功,则不执行命令2。
    <例如>
         cat  abc&&pwd
    逻辑或操作符“||”;
    其一般形式是: 命令1 || 命令2

    例如:
    cat abc || pwd
    如果不能将文件abc的内容列出来,则显示当前工作目录的路径。

    在Shell中有两种方式可以将若干命令组合在一起,使其在逻辑上被视为一条命令,它们是用花括号{ }将各命令括起来和用圆括号( )括起来。

    以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边。成组命令的执行顺序是根据命令出现的先后次序,由左至右执行。在管道线中,成组命令把各命令的执行结果汇集在一起,形成一个输出流,这个流作为该管道线中下一个命令的输入。
    例如,
    { echo "User Report for ` date ` . "; who ; } | pr
    使用花括号时在格式上应注意:
    左括号 “{ ”后面应有一个空格;右括号“}”之前应有一个分号( ;)。


    成组命令也可以用圆括号括起来。
    例如:
    (echo "Current directory is ` pwd ` . "
    cd /home/mengqc ; ls -l ;
    cp m1 em1 && rm m1
    cat em1) | pr
    如上所示,在用圆括号括起成组命令时,左括号后不必有空格,右括号之前也不需加上分号。

    二者执行过程相同,但是存在重要区别:用花括号括起来的成组命令只是在本Shell内执行命令表,不产生新的进程;而用圆括号括起来的成组命令是在新的子Shell内执行,要建立新的子进程。因此,在圆括号内的命令不会改变父Shell的变量值及工作目录等。

    之前以为shell脚本的执行就是把脚本里的shell语句一句一句不停的往linux里丢,刚刚问了下同事,和上网查了一下才知道,理解错了。难过

    转载一句话:你可以把shell脚本看成你手工一条一条语句输入运行的结果。所以你也可以用“&”把一个程序的执行放入后台,但是当脚本运行到最后是不会等待这个进程的返回结果的,所以会直接结束脚本运行,该进程也会成为一个孤儿。解决方法是在脚本最后放“wait”


    总结: shell脚本的执行就和手动一行一行打入一样;可以用&把它放到后台,这样就不需要等上一行命令结束就可以继续执行。


    展开全文
  • ”、双and号“&&”和双竖线“||”来连接个命令,这篇文章主要介绍了Shell脚本命令逻辑执行顺序的方法,本文给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友参考下
  • 本发明公开了一种限制shell 脚本并行执行 的方法,应用于linux 和unix 平台,包括:当有 shell 脚本需要执行时,脚本模块处理器向管道 写入请求;令牌模块处理器在管道另一端顺序读 取所述请求,当有令牌空闲时,将...
  • bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html ..."符号也算命令连接符号,只不过它是将其前面的命令放入后台执行,所以可以变相地实现命令并行执行。 1.分号";" command1 ; c...

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html


    Linux中可以使用分号“;”、双and号“&&”和双竖线“||”来连接多个命令。单"&"符号也算命令连接符号,只不过它是将其前面的命令放入后台执行,所以可以变相地实现命令并行执行。

    1.分号";"

    command1 ; command2

    命令之间没有逻辑关系。分号连接的命令会按照顺序从前向后依次执行,但分号两端的命令之间没有任何逻辑关系,所有写出来的命令最终都会被执行,即使分号前面的命令出错也不影响后面的命令。

    [root@xuexi ~]# ls das;echo "hdakl"
    ls: cannot access das: No such file or directory
    
    hdakl

    2.&&

    command1  &&  command2

    逻辑与。&&连接的命令会按照顺序从前向后执行,但只有当command1正确执行才执行command2,如果command1不正确执行,则不执行command2。在bash中,通过预定义变量“$?”来判断命令是否正确执行,如果"$?"的值为0则表示前一条命令正确执行,其他任意值都表示不正确执行。\

    [root@xuexi ~]# echo "hdakl" && ls ds 
    hdakl
    ls: cannot access ds: No such file or directory
    [root@xuexi ~]# ls das && echo "hdakl"
    ls: cannot access das: No such file or directory

    3.||

    command1 || command2

    逻辑或。||连接的命令会按照顺序从前向后执行,但只有当command1不正确执行才执行command2,command1正确执行则不会执行command2。||和&&都是短路符号,符号左右的命令之间具有逻辑关系。

    [root@xuexi ~]# ls das || echo "hdakl" 
    ls: cannot access das: No such file or directory
    hdakl
    [root@xuexi ~]# echo "hdakl" || ls ds   
    hdakl

    一般要联合使用&&和||的时候,基本上都会先逻辑与再逻辑或command1 && command2 || command3。因为在实际中,command2和command3应该都是想要执行的命令。如果command1正确执行,$?就等于0,执行command2,再看情况执行command3,如果command1错误执行,$?就不等于0,所以不执行command2,根据$?为非0值,判断了 || 右边的命令应该被执行。

    通俗点的理解方法是根据语义判断。“如果...就...否则...就...”的语句使用“cmd1 && cmd2 || cmd3”,“如果不...就...否则...就...”使用“!cmd1 && cmd2 || cmd3”。

    例如,如果用户user1存在,就显示用户已经存在,否则,就添加此用户。

    [root@xuexi tmp]# id user1 && echo "user1 exists" || useradd user1

    如果用户user2不存在,则添加此用户,否则显示用户已存在。

    [root@xuexi tmp]# !id user2 && useradd user2 || echo "user2 exists"

    如果用户user3不存在,则添加此用户,并设定其密码为用户名本身,否则显示用户已存在。

    [root@xuexi tmp]# !id user3 && useradd user3 && echo "user3" | passwd --stdin user3 || echo "user3 exists"

    4.&

    command1 &

    command1 & command2

    &表示将其前面的命令放入后台执行,放入后台后会立即返回到bash环境让用户可以继续和bash交互。如果&符号连接了两个命令,则其前面的命令被放入后台,立即执行后面的命令,所以可以简单地认为这两个命令是并行执行的,两端的命令之间也没有任何逻辑关系。

    需要注意的一点是,在终端的bash环境下,子shell中的后台的进程不受终端控制,在终端被关闭时它会挂靠在init/systemd进程下,因此退出终端或脚本shell环境,无法中断这些后台进程。例如:

    [root@xuexi ~]# (sleep 10 &)     # 终端1上执行,立即关闭该终端
    
    [root@xuexi ~]# ps aux | grep slee[p]     # 终端2上捕捉sleep进程
    root 5732 0.0 0.0 107892 624 ? S 00:28 0:00 sleep 10

    注意ps结果中的"?",它表示非终端进程,即脱离了终端。

    转载于:https://www.cnblogs.com/f-ck-need-u/p/5915106.html

    展开全文
  • shell 一次按顺序执行多脚本

    千次阅读 2019-10-04 04:05:56
    #!/bin/bashsh 全路径/1.shsh 全路径/2.shsh 全路径/3.shsh 全路径/4.sh 转载于:https://www.cnblogs.com/ningmengcaokanyu/p/10839098.html

    #!/bin/bash
    sh 全路径/1.sh
    sh 全路径/2.sh
    sh 全路径/3.sh
    sh 全路径/4.sh

    转载于:https://www.cnblogs.com/ningmengcaokanyu/p/10839098.html

    展开全文
  • 每条命令后如果不加&的话就是依次一行一行的顺序执行,只有前面一行执行完成后再执行下一行,事实上还有很特殊符号可用来分隔单个的命令:分号(;)、管道(|)、&、逻辑AND (&&),还有逻辑OR (||)。对于每一...

    每条命令后如果不加&的话就是依次一行一行的顺序执行,只有前面一行执行完成后再执行下一行,事实上还有很多特殊符号可用来分隔单个的命令:分号(;)、管道(|)、&、逻辑AND (&&),还有逻辑OR (||)。对于每一个读取的管道,Shell都回将命令分割,

    命令执行操作符

    多条命令可以在一行中出现。它们可以从左到右顺序执行。此时,各条命令之间应以分号( ;)隔开.
    如:
       pwd ; who | wc -l ; cd /usr/bin

    在相邻命令间可存在逻辑关系,即逻辑“与”和逻辑“或”。

    逻辑与操作符“&&”;
    其一般形式:   命令1 && 命令2

    其功能是先执行命令1,如果执行成功,才执行命令2;否则,若命令1执行不成功,则不执行命令2。
    <例如>
         cat  abc&&pwd
    逻辑或操作符“||”;
    其一般形式是: 命令1 || 命令2

    例如:
    cat abc || pwd
    如果不能将文件abc的内容列出来,则显示当前工作目录的路径。

    在Shell中有两种方式可以将若干命令组合在一起,使其在逻辑上被视为一条命令,它们是用花括号{ }将各命令括起来和用圆括号( )括起来。

    以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边。成组命令的执行顺序是根据命令出现的先后次序,由左至右执行。在管道线中,成组命令把各命令的执行结果汇集在一起,形成一个输出流,这个流作为该管道线中下一个命令的输入。
    例如,
    { echo "User Report for ` date ` . "; who ; } | pr
    使用花括号时在格式上应注意:
    左括号 “{ ”后面应有一个空格;右括号“}”之前应有一个分号( ;)。


    成组命令也可以用圆括号括起来。
    例如:
    (echo "Current directory is ` pwd ` . "
    cd /home/mengqc ; ls -l ;
    cp m1 em1 && rm m1
    cat em1) | pr
    如上所示,在用圆括号括起成组命令时,左括号后不必有空格,右括号之前也不需加上分号。

    二者执行过程相同,但是存在重要区别:用花括号括起来的成组命令只是在本Shell内执行命令表,不产生新的进程;而用圆括号括起来的成组命令是在新的子Shell内执行,要建立新的子进程。因此,在圆括号内的命令不会改变父Shell的变量值及工作目录等。

    $( ) 与 ` ` (反引号)一样都是做命令替换的

    ()子Shell中执行

    { ;}当前shell中执行

    [code]command1 `command2 \`command3\` `[/code]用转意符可以嵌套反引号
    1先执行command3
    2执行command2
    3 执行Command1

    要不然,换成 $( ) 就没问题了:
    [code]command1 $(command2 $(command3))[/code]


    1.3.1 分号;

    当多个命令想在写在一行上同时执行,可以在每个命令后使用分号“;”。多个命令之间没有任何逻辑关系,所有写出来的命令都会执行,即使某个命令有错误也不影响其他命令。

    [root@xuexi ~]# ls das;echo "hdakl"

    ls: cannot access das: No such file or directory

    hdakl


    展开全文
  • 线程执行shell脚本

    千次阅读 2017-12-28 10:33:50
    Linux下模拟线程的并发并发shell脚本  分享一个在Linux下模拟线程的并发脚本,使用这个脚本可以同时批量在定义数量的服务器上执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高非常...
  • 线程执行for循环shell脚本

    万次阅读 2017-12-29 15:22:48
    需求:并发检测1000台web服务器状态(或者并发为1000台web服务器分发文件等...思路:一个for循环1000次,顺序执行1000次任务。 实现: #!/bin/bash start_time=`date +%s` #定义脚本运行的开始时间 for ((i=
  • 目录 Shell 脚本的执行 赋予执行权限,直接运行 ...命令顺序执行 管道符 行提取命令 grep find 和 grep 的区别 Shell 脚本的执行 [root@localhost sh]# vi hello.sh #!/bin/Bash #The first progr
  • shell脚本执行问题

    2018-06-14 11:33:07
    实际遇见的问题:一个脚本执行个任务如下:A &amp;B &amp;C D这样执行顺序会是,A B C 同时并行执行,而D 会在 C 执行完成之后执行,注意这里面的坑。...
  • Shell脚本顺序执行的,但是系统允许Shell脚本同时执行,为了达到资源的综合利用,也就是把服务器往死里用,有时候需要一段脚本对个脚本进行线程的调度,并且等待完成之后继续执行后续的脚本。   主脚本...
  • oozie顺序执行sh脚本。 1 描述 依次执行p1.sh 和p2.sh。每个里面都是简单的打印信息。如下 p1.sh [grq@hadoop102 shell]$ more p1.sh #!/bin/bash echo ''&amp;amp;amp;amp;amp;amp;gt;/tmp/p1.log...
  • 一般脚本正常情况下执行过程是按顺序执行的,简单来说就是上一个执行完毕了才会进行下一个; 代码和执行结果如下: [root@controller ccx]# cat ping.sh for i in {1..10} ; do echo $i sleep 1 done echo ...
  • 工作中常遇到一些数据问题,需要各种脚本去处理,各种先后顺序,还要处理个库,还会遇到某个脚本处理某个库时报错需要重新处理的问题,因此用一个shell把它们串起来就比较方便了 1.个库执行同一个脚本 #/bin/...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    Linux 是一个真正的用户操作系统,可以同时接受个用户登录,还允许一个用户进行次登录。这是因为Linux和许多版本的Unix一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制台(系统的控制台是与系统...
  • shell脚本多线程实现

    2019-11-20 10:10:33
    shell脚本多线程实现 在使用shell 脚本时,碰到了顺序执行太慢的情况,因此考虑使用线程方式,以提高效率。 具体做法是使用 &+wait 达到线程的效果,下面请看对比。 顺序执行 执行3次没次等待4秒,共计耗时...
  • shell 命令执行顺序

    千次阅读 2017-07-06 03:43:40
    shell 命令执行顺序shell执行命令的步骤顺序如上图,看起来有些复杂。 当命令行被处理时,每一个步骤都是在Shell的内存里发生的;Shell不会真的把每个步骤的发生显示给你看。 所以,你可以假想这事我们偷窥Shell...
  • 执行Shell脚本的方式:1.bash test.sh//不需要写解析器//不需要给脚本设置执行权限 ./test.sh//需要写解析器——脚本首行#!/bin/bash//需要给脚本设置执行权限chmod a+x test.sh 写个Shell...
  • Shell脚本

    2019-02-28 12:49:31
    集中保存了条Linux命令,普通文本文件 完成特定的,较为复杂的系统管理任务 执行方式:按照预设的顺序依次解释执行 ...11.执行shell脚本的方式 1.bash test.sh #不需要解析器 #不需要给脚本设置执行权限 ...
  • Shell 从标准输入或脚本中读取的每一行称为管道(pipeline);它包含了一个或个命令(command),这些命令被一个或个管道字符(|)隔开
  • shell脚本语法

    万次阅读 2018-06-30 21:26:23
    分割条命令,按顺序执行脚本文件中第一行必须用#! path-to-shell指定所用的shell。 除了第一行之外的#都是注释的开始标记,注释此行中#之后的内容 脚本要有执行权限,最好以sh作为后缀 变量 ...
  • 一个在Linux下模拟线程的并发的方法,使用这个方法可以同时批量在定义数量的服务器上执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高非常。 1、不使用线程的情况 /Users/nisj/...
  • 顺序执行是不满足要求的,因此,此时需要用到线程处理。具体实现方法如下图所示: 方式:shell 的for循环do与done之间的代码使用{ }&放在后台执行。 #!/bin/bash for i in `seq 2 5` do { java -jar ...
  • shell多进程执行

    2020-07-26 12:45:05
    shell脚本是将要执行的命令按一定顺序写成的一个文本文件,最近遇到一个需求,要将一定数量的命令快速执行,而每次执行都需要一定的时间,最终使用 &提交后台执行来完成,如: cat test.txt | grep abc > abc...
  • 分享一个在Linux下模拟线程的并发脚本,使用这个脚本可以同时批量在定义数量的服务器上执行相关命令,比起普通for/while循环只能顺序一条一条执行的效率高非常,在管理大批服务器时非常的实用。 以下脚本功能是...
  • shell脚本进阶

    2018-05-14 08:44:09
    流程控制过程式编程语言:顺序执行、选择执行、循环执行条件选择IF语句:选择执行:注意:if语句可嵌套单分支 if 判断条件;then条件为真的分支代码fi双分支 if 判断条件; then条件为真的分支代码else条件为假的分支...
  • 一、Bash的基本功能 1、历史命令: Linux非常的智能会将我们敲过的所有命令,都保存到我们的计算机当中。只要我们使用history命令直接回车,就可以看到我之前敲过的命令。 命令格式:[root@localhost ~]# ...

空空如也

1 2 3 4 5 ... 17
收藏数 328
精华内容 131
关键字:

多shell脚本顺序执行