Shell三種執行方式簡單參數說明

jopen 9年前發布 | 7K 次閱讀 Linux 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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!