在shell腳本的開頭往往有一句話來定義使用哪種sh解釋器來解釋腳本。
目前研發(fā)送測的shell腳本中主要有以下兩種方式:
(1) #!/bin/sh
(2) #!/bin/bash
以上兩種方式有什么區(qū)別展蒂?對于腳本的實際運行會產(chǎn)生什么不同的影響嗎惑朦?
腳本test.sh內(nèi)容:
#!/bin/sh
source pcy.sh #pcy.sh并不存在
echo hello
執(zhí)行./test.sh,屏幕輸出為:
./test.sh: line 2: pcy.sh: No such file or directory
由此可見矮台,在#!/bin/sh的情況下乏屯,source不成功,不會運行source后面的代碼瘦赫。
修改test.sh腳本的第一行辰晕,變?yōu)?!/bin/bash,再次執(zhí)行./test.sh确虱,屏幕輸出為:
./test.sh: line 2: pcy.sh: No such file or directory
hello
由此可見含友,在#!/bin/bash的情況下,雖然source不成功校辩,但是還是運行了source后面的echo語句唱较。
但是緊接著我又試著運行了一下sh ./test.sh,這次屏幕輸出為:
./test.sh: line 2: pcy.sh: No such file or directory
表示雖然腳本中指定了#!/bin/bash召川,但是如果使用sh 方式運行南缓,如果source不成功,也不會運行source后面的代碼荧呐。
為什么會有這樣的區(qū)別呢汉形?
說明:
1. sh一般設(shè)成bash的軟鏈
[work@zjm-testing-app46 cy]$ ll /bin/sh
lrwxrwxrwx 1 root? ? root? ? ? ? ? 4 Nov 13? 2006 /bin/sh -> bash
2. 在一般的linux系統(tǒng)當(dāng)中(如redhat)纸镊,使用sh調(diào)用執(zhí)行腳本相當(dāng)于打開了bash的POSIX標(biāo)準(zhǔn)模式
3. 也就是說 /bin/sh 相當(dāng)于 /bin/bash --posix
所以,sh跟bash的區(qū)別概疆,實際上就是bash有沒有開啟posix模式的區(qū)別
so逗威,可以預(yù)想的是,如果第一行寫成 #!/bin/bash --posix岔冀,那么腳本執(zhí)行效果跟#!/bin/sh是一樣的(遵循posix的特定規(guī)范凯旭,有可能就包括這樣的規(guī)范:“當(dāng)某行代碼出錯時,不繼續(xù)往下解釋”)