shell 指令碼的執行

2021-07-03 17:02:32 字數 2320 閱讀 2402

如何執行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...