Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

shell命令执行顺序

Posted on 2009-03-26 11:26 Prayer 阅读(480) 评论(0)  编辑 收藏 引用 所属分类: Shell

1.&&

 

在一个普通的shell中,命令执行是没有相互依赖的,比如

cat my1.txt

cat my2.txt

大家可以试试,无论上面一个命令是否正确运行,下面的指令都会运行。但有时候我们需要前一个指令没有成功执行时候,后一个指令就不要运行,这里就牵扯到&&。

[root@liumengli my_shell]# ls
1.sh  2.sh  case_shell.sh  crontab.txt  first.sh  for_shell.sh  hello  hello zhangchi  my.txt  shell_example.sh  test  until_shell.sh  while_shell.sh
[root@liumengli my_shell]# cat 1.sh && cat 2.sh
#!/bin/sh

echo "hello yuna"

exit 1
#!/bin/sh

echo "hello difa"
exit 0
[root@liumengli my_shell]# cat 3.sh && cat
cat        catchsegv 
[root@liumengli my_shell]# cat 3.sh && cat 2.sh
cat: 3.sh: 没有这个目录
从结果中可以看到cat 3.sh没有成功运行,那么cat 2.sh就不会成功运行。自己写的shell脚本也可以用&&链接起来

 

这里又牵扯到一个问题,到底怎样才算成功运行了呢。像上面那样 cat 3.sh这个是明显失败了。但如果我有2个脚本,如何才算前一个脚本成功运行了呢?关键在于 exit,如果exit 0被执行了就表示前一个成功运行, exit 1就没有成功运行,例如

[root@liumengli my_shell]# cat 1.sh
#!/bin/sh

echo "hello yuna"

exit 1
[root@liumengli my_shell]# cat 2.sh
#!/bin/sh

echo "hello difa"
exit 0
[root@liumengli my_shell]# ./1.sh && ./2.sh
hello yuna
[root@liumengli my_shell]# ./2.sh && ./1.sh
hello difa
hello yuna
[root@liumengli my_shell]#
第一个只执行了1.sh,因为它返回1,虽然从实际意义上看来,我们 1.sh成功运行了,但2.sh还是不会被运行。

 

2.||

 

和&&正好相反,当第一个指令运行失败时候,才运行第2个指令(当然也可以是脚本,和&&类似)。

 

3.()和{}

 

样例

[root@liumengli my_shell]# (./1.sh ; ./2.sh )
hello yuna
hello difa
[root@liumengli my_shell]#

这个表示这2个指令(其实是脚本)在一起运行,且都是在当前 shell中运行

如果是{}的话(语法一样,中间有;号,注意第一个要有空格,则指令不再当前 shell,而在这个shell的子shell下面运行


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理