分类 报考指南 考试报名 培训辅导 准考证.证书 成绩查询 注册信息 政策大纲 模拟真题

Linux基础知识:linuxshell编程-命令执行顺序

在执行某个命令的时候,有时需要依赖于前一个命令是否执行成功。例如,假设你希望将一个目录中的文件全部拷贝到另外一个目录中后,然后删除源目录中的全部文件。在删除

  之前,你希望能够确信拷贝成功,否则就有可能丢失所有的文件。

  如果希望在成功地执行一个命令之后再执行另一个命令,或者在一个命令失败后再执行另一个命令,&&和||可以完成这样的功能。相应的命令可以是系统命令或shell脚本。Shell还提供了在当前shell或子shell中执行一组命令的方法,即使用()和{ }.

  使用& &的一般形式为:

  命令1 && 命令2

  这种命令执行方式相当地直接。& &左边的命令(命令1)返回真(即返回0,成功被执行)后,& &右边的命令(命令2)才能够被执行;换句话说,"如果这个命令执行成功& &那么执行这个命令".

  $ mv /apps/bin /apps/dev/bin && rm -r /apps/bin

  在上面的例子中,/apps/bin目录将会被移到/apps/dev/bin目录下,如果它没有被成功执行,就不会删除/apps/bin目录。

  在下面的例子中,文件quarterend.txt首先将被排序并输出到文件quarter.sorted中,只有这一命令执行成功之后,文件quarter .sorted才会被打印出来:

  $ sort quarter_end.txt > quarter.sorted && lp quarter.sorted

  使用| |的一般形式为:

  命令1 || 命令2

  | |的作用有一些不同。如果| |左边的命令(命令1)未执行成功,那么就执行| |右边的命令(命令2);或者换句话说,"如果这个命令执行失败了|| 那么就执行这个命令".

  [root@localhost huangcd]# cp gsdf.txt opps.txt || echo "if you are seeing this cp failed"

  cp: 无法 stat "gsdf.txt": 没有那个文件或目录

  if you are seeing this cp failed

  这里有一个更为实用的例子。我希望从一个审计文件中抽取第1个和第5个域,并将其输出到一个临时文件中,如果这一操作未成功,我希望能够收到一个相应邮件:

  [root@localhost huangcd]# awk '{print $1,$5}' acc.qtr >qtr.tmp ||echo "sorry hte payroll extraction didn't work" |mail root

  在这里不只可以使用系统命令;这里我们首先对monthend.txt文件执行了一个名为comet的shell脚本,如果该脚本未执行成功,该shell将结束。

  $ comet month_end.txt || exit

  用()和{ }将命令结合在一起:

  如果希望把几个命令合在一起执行, shell提供了两种方法。既可以在当前shell也可以在子shell中执行一组命令。

  为了在当前shell中执行一组命令,可以用命令分隔符隔开每一个命令,并把所有的命令用圆括号()括起来。

  它的一般形式为:

  (命令1;命令2;. . .)

  如果使用{ }来代替(),那么相应的命令将在子shell而不是当前shell中作为一个整体被执行,只有在{ }中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子shell中执行,否则在当前shell执行。它的一般形式为:

  {命令1;命令2;. . . }

  我很少单独使用这两种方法。我一般只和& &或| |一起使用这两种方法。

  再回到前面那个comet脚本的例子,如果这个脚本执行失败了,我很可能会希望执行两个以上的命令,而不只是一个命令。我可以使用这两种方法。这是原先那个例子:

  $ comet month_end.txt || exit

  现在如果该脚本执行失败了,我希望先给自己发个邮件,然后再退出,可以用下面的方法来实现:

  [root@localhost huangcd]# eomet month_end.txt||(echo "hello,guess what!comet did not work"|mail root ; exit)

  在上面的例子中,如果只使用了命令分隔符而没有把它们组合在一起, shell将直接执行

  最后一个命令(exit)。

  我们再回头来看看前面那个使用& &排序的例子,下面是原来的那个例子:

  $ sort quarter_end.txt > quarter.sorted && lp quarter.sorted

  使用命令组合的方法,如果sort命令执行成功了,可以先将输出文件拷贝到一个日志区,然后再打印。


   >>学课在线网课试听.报名        >>学课在线智能题库.模拟做题       >>直播课程       >>录播课程

课程名称
课程免费试听
课程名称
课程免费试听
课程名称
课程免费试听
初级会计师

一级建造师

执业药师

中级会计师

二级建造师

护士资格证

注册会计师

一级造价工程师

健康管理师

经济师考试

监理工程师

考研辅导课

银行从业

安全工程师

自考课程

基金从业

一级消防工程师

心理咨询师

企业人力资源管理师

法律职业资格考试

公共营养师

社会工作者

消防设施操作员

保育员

教师资格证

成人高考

育婴师

公务员培训

文职培训

英语四六级

计算机软考
养老护理员
税务师培训

房产经纪人
咨询工程师

其它课程>>



重要提醒!!内容中联系方式并非本站联系方式,报名咨询的学员请与下面最新联系方式联系我们咨询报名-以免损失!
>>长期招聘兼职招生代理人员,项目合作,团报优惠咨询,有意者请联系我们 >>咨询:13312524700(可加微信)。

昆明学历中心:◆咨询电话:0871-65385921、13312528471 赖老师、钱老师(微信报名:17787865775)点击这里给我发消息


云南地州中心:◆咨询电话:0871-65385921、17787865775 冯老师、 王老师(微信报名:17787865775)点击这里给我发消息


总部报名地址: ◆昆明市-五华区教场东路莲花财富中心10楼;网课试听:ke.xuekaocn.cn   点击这里立即咨询我们



地州分校:   大理分校   丽江分校   迪庆分校   怒江分校   红河分校   临沧分校   玉溪分校   文山分校   保山分校   德宏分校   昭通分校   普洱分校   版纳分校 【各地州学员请加老师微信咨询报名,电话(微信):133-1252-4700】;2021年云南省成人高考>>立即报名



职业技能考证:心理咨询师、健康管理师、茶艺师等更多>◆咨询电话:133 1252 4700(微信)点击这里咨询我们  

公考培训咨询:◆国考云南省考公务员/事业单位面授培训,咨询电话:133 1252 4700 (微信)点击这里立即咨询我们






温馨提示:因考试政策、内容不断变化与调整,学课在线网提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

免责声明:以上内容仅代表原创者观点,其内容未经本站证实,学课在线网对以上内容的真实性、完整性不作任何保证或承诺,转载目的在于传递更多信息,由此产生的后果与学课在线网无关;如以上转载内容不慎侵犯了您的权益,请联系我们QQ:1536696595,我们将会及时处理。




网友评论