Shell三種執行方式簡單參數說明
Shell三種執行方式 (非原創,忘記了是誰的博客叻)
1: . 文件名
1、source命令用法: source FileName
作用:在當前bash環境下讀取并執行FileName中的命令。該filename文件可以無"執行權限"
注:該命令通常用命令“.”來替代。
如:source bash_profile . bash_profile兩者等效。
source(或點)命令通常用于重新執行剛修改的初始化文檔。
source命令(從 C Shell 而來)是bash shell的內置命令。
點命令,就是個點符號,(從Bourne Shell而來)。就是順序的執行文件里的命令而已。
2: sh 文件名
sh和bash命令用法: sh FileName bash FileName
作用:在當前相應的bash環境下新建一個子shell讀取并執行FileName中的命令。該filename文件可以無"執行權限"
注:兩者在執行文件時的不同,是分別用自己的shell來跑文件。 sh使用“-n”選項進行shell腳本的語法檢查,使用“-x”選項實現shell腳本逐條語句的跟蹤,可以巧妙地利用shell的內置變量增強“-x”選項的輸出信息等。
3: ./文件名
./的命令用法: ./FileName
作用:打開一個子shell來讀取并執行FileName中命令。
該文件必須有可執行的權限。
注:運行一個shell腳本時會啟動另一個命令解釋器.
每個shell腳本有效地運行在父shell(parent shell)的一個子進程里. 這個父shell是指在一個控制終端或在一個xterm窗口中給你命令指示符的進程.shell腳本也可以啟動他自已的子進程.這些子shell(即子進程)使腳本并行地,有效率地地同時運行腳本內的多個子任務.腳本里的變量設置在父進程中無效。腳本中的export僅僅作用于該腳本及其子腳本位置變量參數在向腳本傳遞參數時,可以使用此位置變量來獲取參數。他們分別是:
$0:腳本名字。此變量包含地址,可以使用basename
$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中
來自:http://my.oschina.net/repine/blog/528000