Posted on 2009-03-26 11:26
Prayer 阅读(492)
评论(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下面运行