shell指令碼的執行方式

2022-08-21 19:30:13 字數 2659 閱讀 2285

先來看乙個簡單的shell指令碼:12

3#!/bin/sh

cd/tmp

echo"hello,world!"

我們來挨個解釋一下指令碼的每一行:

第一行:#!後面跟的是直譯器的路徑(shell本身就是一種解釋型語言),直譯器的路徑是/bin/sh;

第二行:cd命令是切換當前工作目錄的命令,tep是linux下根目錄的乙個子目錄;

第三行:echo命令是輸出後面所跟的引數

三種執行方法:

第一種:因為shell程式寫完之後並沒有執行許可權,所以該指令碼想要執行可以使用chmod命令賦予該指令碼可執行的許可權,然後再執行。12

3456

78[root@localhost shell]# chmod +x echo.sh

[root@localhost shell]# ./echo,sh

bash: ./echo,sh: 沒有那個檔案或目錄

[root@localhost shell]# ./echo.sh

hello,world!

[root@localhost shell]# pwd

/root/shell

[root@localhost shell]#

第二種:呼叫直譯器使得指令碼執行,例如:bash、csh、csh、ash、bsh、ksh等等;12

34[root@localhost shell]# sh echo.sh

hello,world!

[root@localhost shell]# bash echo.sh

hello,world!

[root@localhost shell]# pwd

/root/shell

第三種:使用source命令;

3、source(source /home/script.sh)依賴且影響變數,不影響主指令碼執行

使用source或者「.」來呼叫外部指令碼,不會產生新的程序,繼承當前shell環境變數,

而且被呼叫的指令碼執行結束後,它擁有的環境變數和宣告變數會被當前shell保留,類似將呼叫指令碼的內容複製過來直接執行。執行完畢後原主shell繼續執行。12

3456

root@localhost shell]# source echo.sh

hello,world!

[root@localhost tmp]# pdw

bash: pdw:commandnot found

[root@localhost tmp]# pwd

/tmp

在指令碼的第一行有cd命令,這是乙個改變工作目錄的命令,可是使用第一種和第二種放大執行指令碼後當前的工作目錄並沒有改變(指令碼所在的目錄是shell資料夾,指令碼執行後,使用pwd命令顯示出當前的工作目錄還是shell),使用第三種方法執行後當前的工作目錄就改變了,進入了tmp中。出現這種情況是系統本身執行指令碼的方式不同所造成的!

前兩種方法執行指令碼時系統會建立乙個子程序或者說子shell來執行指令碼,原來的程序就是父程序或者說父shell,整個過程中父程序會等待子程序執行完畢,然後子程序退出,父程序也退出。cd命令確實被執行了,但是僅僅是在子程序中改變了工作目錄,所以指令碼執行完後使用pwd顯示工作目錄並沒有改變。而第三種方法執行的shell指令碼的話並不建立子程序,就是在原來的程序中執行,所以最後的工作目錄改變了。

4、exec(exec /home/script.sh):依賴且獨立影響主指令碼執行

使用exec來呼叫指令碼,被執行的指令碼會繼承當前shell的環境變數。

但事實上exec產生了新的程序,他會把主shell的程序資源占用並替換指令碼內容,繼承了原主shell的pid號,

原主shell剩下的內容不會執行

5、fork(/home/script.sh)依賴但不影響變數

直接執行指令碼,會以當前shell為父程序,產生新的程序,並且繼承主指令碼的環境變數和宣告變數。

執行完畢後,主指令碼不會保留其環境變數和宣告變數。

shell指令碼執行方式

echo輸出命令 echo 選項 輸出內容 選項 e 支援反斜線控制的字元轉換 shell指令碼 指令碼都以.sh結束,指令碼第一行 bin bash 以hello.sh簡單指令碼為例 指令碼執行有兩種方法 這裡出現了no such file or directory 原因是格式不匹配,解決方案 d...

shell 指令碼的執行方式

執行shell指令碼的方式基本上有三種 1 輸入定向到shell指令碼 這種方式是用輸入重定向方式讓shell從給定檔案中讀入命令列並進行相應處理。其一般形式是 bash 指令碼名 例如 bash 2 以指令碼名作為引數 其一般形式是 bash 指令碼名 引數 例如 bash ex2 usr men...

執行Shell指令碼的方式

執行shell指令碼的方式基本上有三種 1 輸入定向到shell指令碼 這種方式是用輸入重定向方式讓shell從給定檔案中讀入命令列並進行相應處理。其一般形式是 bash 指令碼名 例如 bash shell從檔案ex1中讀取命令列,並執行它們。當shell到達檔案末尾時就終止執行,並把控制返回到s...