Posted on 2009-03-26 11:26
Prayer 閱讀(497)
評論(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下面運行