Posted on 2009-03-26 11:26
Prayer 閱讀(498)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
Shell
1.&&
在一個(gè)普通的shell中,命令執(zhí)行是沒(méi)有相互依賴(lài)的,比如
cat my1.txt
cat my2.txt
大家可以試試,無(wú)論上面一個(gè)命令是否正確運(yùn)行,下面的指令都會(huì)運(yùn)行。但有時(shí)候我們需要前一個(gè)指令沒(méi)有成功執(zhí)行時(shí)候,后一個(gè)指令就不要運(yùn)行,這里就牽扯到&&。
[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: 沒(méi)有這個(gè)目錄
從結(jié)果中可以看到cat 3.sh沒(méi)有成功運(yùn)行,那么cat 2.sh就不會(huì)成功運(yùn)行。自己寫(xiě)的shell腳本也可以用&&鏈接起來(lái)
這里又牽扯到一個(gè)問(wèn)題,到底怎樣才算成功運(yùn)行了呢。像上面那樣 cat 3.sh這個(gè)是明顯失敗了。但如果我有2個(gè)腳本,如何才算前一個(gè)腳本成功運(yùn)行了呢?關(guān)鍵在于 exit,如果exit 0被執(zhí)行了就表示前一個(gè)成功運(yùn)行, exit 1就沒(méi)有成功運(yùn)行,例如
[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]#
第一個(gè)只執(zhí)行了1.sh,因?yàn)樗祷?,雖然從實(shí)際意義上看來(lái),我們 1.sh成功運(yùn)行了,但2.sh還是不會(huì)被運(yùn)行。
2.||
和&&正好相反,當(dāng)?shù)谝粋€(gè)指令運(yùn)行失敗時(shí)候,才運(yùn)行第2個(gè)指令(當(dāng)然也可以是腳本,和&&類(lèi)似)。
3.()和{}
樣例
[root@liumengli my_shell]# (./1.sh ; ./2.sh )
hello yuna
hello difa
[root@liumengli my_shell]#
這個(gè)表示這2個(gè)指令(其實(shí)是腳本)在一起運(yùn)行,且都是在當(dāng)前 shell中運(yùn)行
如果是{}的話(huà)(語(yǔ)法一樣,中間有;號(hào),注意第一個(gè)要有空格,則指令不再當(dāng)前 shell,而在這個(gè)shell的子shell下面運(yùn)行