一、source命令用法: source FileName
做用:在當前bash環境下讀取並執行FileName中的命令。該filename文件能夠無"執行權限"
注:該命令一般用命令「.」來替代。
如:source bash_profile . bash_profile二者等效。
source(或點)命令一般用於從新執行剛修改的初始化文檔。
source命令(從 C Shell 而來)是bash shell的內置命令。
點命令,就是個點符號,(從Bourne Shell而來)。就是順序的執行文件裏的命令而已。 shell
sh和bash命令用法: sh FileName bash FileName
做用:在當前相應的bash環境下新建一個子shell讀取並執行FileName中的命令。該filename文件能夠無"執行權限"
注:二者在執行文件時的不一樣,是分別用本身的shell來跑文件。 sh使用「-n」選項進行shell腳本的語法檢查,使用「-x」選項實現shell腳本逐條語句的跟蹤,能夠巧妙地利用shell的內置變量加強「-x」選項的輸出信息等。 bash
./的命令用法: ./FileName
做用:打開一個子shell來讀取並執行FileName中命令。
該文件必須有可執行的權限。
注:運行一個shell腳本時會啓動另外一個命令解釋器.
每一個shell腳本有效地運行在父shell(parent shell)的一個子進程裏. 這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.shell腳本也能夠啓動他自已的子進程.這些子shell(即子進程)使腳本並行地,有效率地地同時運行腳本內的多個子任務.腳本里的變量設置在父進程中無效。腳本中的export僅僅做用於該腳本及其子腳本位置變量參數在向腳本傳遞參數時,可使用此位置變量來獲取參數。他們分別是:
$0:腳本名字。此變量包含地址,可使用basename spa
$0得到腳本名稱。
$1:第一個參數
$2,$3,$4,$5,...一次類推。
特定變量參數
一些腳本運行的相關控制信息
$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示全部向腳本傳遞的參數
$$ 腳本運行的ID號
$! 後臺運行的最後一個進程的ID號
$@ 與$#相同,可是使用時加引號,並在引號中返回每一個參數。
$- 顯示shell使用的當前選項。
$? 顯示最後命令的推出情況。0表示沒有錯誤。 繼承
source filename 與 sh filename 及./filename執行腳本的區別在那裏呢?
1.當shell腳本具備可執行權限時,用sh filename與./filename執行腳本是沒有區別得。./filename是由於當前目錄沒有在PATH中,全部"."是用來表示當前目錄的。
2.sh filename 從新創建一個子shell,在子shell中執行腳本里面的語句,該子shell繼承父shell的環境變量,但子shell新建的、改變的變量不會被帶回父shell,除非使用export。
3.source filename:這個命令其實只是簡單地讀取腳本里面的語句依次在當前shell裏面執行,沒有創建新的子shell。那麼腳本里面全部新建、改變變量的語句都會保存在當前shell裏面。
舉例說明:
1.新建一個test.sh腳本,內容爲:A=1
2.而後使其可執行chmod +x test.sh
3.運行sh test.sh後,echo $A,顯示爲空,由於A=1並未傳回給當前shell
4.運行./test.sh後,也是同樣的效果
5.運行source test.sh 或者 . test.sh,而後echo $A,則會顯示1,說明A=1的變量在當前shell中 進程