Shell作用是解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行這一條,這種方式稱為交互式,但還有另一種執行命令的方式稱為批處理方式,用戶事先寫一個Shell腳本,Shell可以一次把這些命令執行完。
如下例子:
第一種執行方式:chmode+x script.sh
執行過程:
Shell會fork一個子進程並調用exec執行./script.sh這個程序,exec系統調用會把子進程代碼段替換成./script.sh程序的代碼段,exec有一種機制,如果要執行的是一個文本文件,並且第一行Shebang 指定了解釋器,則用解釋器程序的代碼段替換當前進程,並且從解釋器 的_start開始執行,而這個文本文件被當作命令行參數傳給解釋器
第二種執行方式:
shell執行過程:
1. 交互Shell(bash)fork/exec一個子Shell(sh)用於執行腳本,父進程bash等待子進程sh終 止。
2. sh讀取腳本中的cd ..命令,調用相應的函數執行內建命令(不創建子進程,父進程運行),改變當前工作目錄為上一級目 錄。
3. sh讀取腳本中的ls命令,fork/exec這個程序,列出當前工作目錄下的文件,sh等待ls終止。
4. ls終止后,sh繼續執行,讀到腳本文件末尾,sh終止。
5. sh終止后,bash繼續執行,打印提示符等待用戶輸入。
兩種方法執行Shell腳本的效果是相同的,cd ..命令改變的是子Shell的PWD,而不會影響到 交互式Shell。
source ./script.sh或者. ./script.sh命令:
source或者.命令是Shell的內建命令,這種方式也不會創建子Shell,而是直接在交互式Shell下逐行 執行腳本中的命令。