如何執行shell程式,如何在shell程式以及後續指令碼中使用同乙個變數,這些在工作中經常用到, 我找到如下的文章,再加深複習一下。
1.source命令用法:
source filename
作用:在當前bash環境下讀取並執行filename中的命令。該filename檔案可以無"執行許可權"
注:該命令通常用命令「.」來替代。
如:source .bash_profile
. .bash_profile兩者等效。
source(或點)命令通常用於重新執行剛修改的初始化文件。
source命令(從 c shell 而來)是bash shell的內建命令。
點命令,就是個點符號,(從bourne shell而來)。
source的程式主體是bash,指令碼中的$0變數的值是bash,而且由於作用於當前bash環境,指令碼中set的變數將直接起效
2 sh, bash的命令用法:
sh/bash filename
作用:開啟乙個子shell來讀取並執行filename中命令。該filename檔案可以無"執行許可權"
注:執行乙個shell指令碼時會啟動另乙個命令直譯器.
每個shell指令碼有效地執行在父shell(
parent
shell)的乙個子程序裡.
這個父shell是指在乙個控制終端或在乙個xterm視窗中給你命令指示符的程序.
shell指令碼也可以啟動他自已的子程序.
這些子shell(即子程序)使指令碼並行地,有效率地地同時執行指令碼內的多個子任務.
在ubuntu中sh只是bash的乙個鏈結。
由於是在子shell中執行,指令碼設定的變數不會影響當前shell。
3、./的命令用法:
./filename
作用:開啟乙個子shell來讀取並執行filename中命令。該filename檔案需要"執行許可權"
注:執行乙個shell指令碼時會啟動另乙個命令直譯器.
每個shell指令碼有效地執行在父shell(
parent
shell)的乙個子程序裡.
這個父shell是指在乙個控制終端或在乙個xterm視窗中給你命令指示符的程序.
shell指令碼也可以啟動他自已的子程序.
這些子shell(即子程序)使指令碼並行地,有效率地地同時執行指令碼內的多個子任務.
由於是在子shell中執行,指令碼設定的變數不會影響當前shell。
4. export: 乙個變數建立時,它不會自動地為在它之後建立的shell程序所知。而命令export可以向後面的shell傳遞變數的值。當乙個
shell指令碼呼叫並執行時,它不會自動得到原為指令碼(呼叫者)裡定義的變數的訪問權,除非這些變數已經被顯式地設定為可用。
export命令可以用於傳遞乙個或多個變數的值到任何後繼指令碼
5. 舉例: 比如您在乙個指令碼裡export $kkk=111 ,假如您用./a.sh執行該指令碼,執行完畢後,您執行 echo $kkk ,發現沒有值,假如您用source來執行 ,然後再echo ,就會發現kkk=111。因為呼叫./a.sh來執行shell是在乙個子shell裡執行的,所以執行後,結構並沒有反應到父shell裡,但是 source不同他就是在本shell中執行的,所以能夠看到結果.
小測試1 建立test.sh
#!/bin/bash
export s=/home/jboss/
2執行命令: source test.sh
echo $s
結果輸出: /home/jboss/
3 新開個shell
執行命令: ./test.sh
echo $s
結果: 沒有輸出s值
結論:1、執行指令碼時是在乙個子shell環境執行的,指令碼執行完後該子shell自動退出。
2、乙個shell中的系統環境變數才會被複製到子shell中(用export定義的變數);
3、乙個shell中的系統環境變數只對該shell或者它的子shell有效,該shell結束時變數消失(並不能返回到父shell中)。3、不用 export定義的變數只對該shell有效,對子shell也是無效的。
直接執行乙個指令碼檔案是在乙個子shell中執行的,而source則是在當前shell環境中執行的。
source可以讓指令碼影響它們的父shell環境,這和export去影響子shell環境相反.
shell 執行shell指令碼
bin bash echo hello world 是乙個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 shell。echo 命令用於向視窗輸出文字。1 作為可執行程式 chmod x test.sh 使指令碼具有執行許可權 test.sh 執行指令碼注意,一定要寫成 test...
shell指令碼的執行
shell指令碼有兩種執行方式,一種是直接執行,一種是使用 source或.命令執行 直接執行shell指令碼,bash會在當前bash下新建乙個子bash程序用來執行shell指令碼,此時指令碼裡定義的變數,並不會傳會到父bash程序中 bin bash var 12 echo var exec....
Shell指令碼的執行
echo i am lyj 按回車鍵後再按ctrl d組合鍵結束編輯 cat test.shsh test.sh sh命令 bash test.sh bash命令ls l tesh.sh test.sh 當無法自動補全表示沒有許可權 執行結果 bash test.sh permission deni...