第一次學shell程式設計,看的文章中說shell程式必須以"#!/bin/sh"開始,也就認為是這樣了。
雖然知道在shell中以"#"開始的語句都是註釋,但也從沒認為"#!/bin/sh"也是註釋,就像對C語言程式必須有main函式一樣毫無懷疑。
但前些時候又聽說"#!/bin/sh"也是註釋,可有可無,當時覺得真是一個失敗,連基本的語法都分不清。
前幾天借了一本書,才真正認識了"#!/bin/sh"。
shell程式設計是以"#"為註釋,但對"#!/bin/sh"卻不是。
"#!/bin/sh"是對shell的宣告,說明你所用的是那種型別的shell及其路徑所在。
如果沒有宣告,則指令碼將在預設的shell中執行,預設shell是由使用者所在的系統定義為執行shell指令碼的shell。
比如:如果指令碼被編寫為在Korn Linux中執行,而預設執行shell指令碼的為C shell csh,則上述指令碼在執行過程中很可能失敗。
所以建議大家就把"#!/bin/sh"當成C 語言的main函式一樣,寫shell必須有,以使shell程式更嚴密。
即: #!/bin/sh 是指此指令碼使用/bin/sh來解釋執行,#!是特殊的表示符,其後面根的是此解釋此指令碼的shell的路徑。
其實第一句的#!是對指令碼的直譯器程式路徑,指令碼的內容是由直譯器解釋的,我們可以用各種各樣的直譯器來寫對應的指令碼。
比如說/bin/csh指令碼,/bin/perl指令碼,/bin/awk指令碼,/bin/sed指令碼,甚至/bin/echo等等。
那我們真的能寫一個/bin/echo的指令碼檔案嗎?我們來試試,下面是一個例子:
程式碼:
#!/bin/echo –e
這隻有一行的程式(實際上它也只能是一行,echo程式並不是被設計成像awk那樣的程式語言,能寫成源程式檔案)命名為myecho,加上許可權後執行它:
程式碼:
$ ./myecho "hi\a" ./myecho hi
如果你的echo支援-e選項並且你工作的環境還算安靜,你在得到上面的結果的時候也應該聽到清脆的終端響鈴。但這種程式是毫無作用的。
參考資料:
終於明白#!bin/sh是什麼意思了
http://blog.sina.com.cn/s/blog_4d32d0b40100fngc.html