首頁 > 軟體

shell指令碼5種執行方式及指令碼不同的執行方法和區別詳解

2022-07-19 18:00:28

前言

shell指令碼是一種指令碼語言,他不需要編譯,而是直接通過直譯器,將指令碼作為直譯器程式的引數執行的。

我們通過編寫vim test.sh,然後用不同方法執行名為test.sh的指令碼。

#!/bin/bash
echo "hello word"

概述

1)使用絕對路徑執行。
2)使用相對路徑執行。語法格式:./a.sh
3)使用 sh或bash命令來執行。語法格式: sh a.sh 不需要執行許可權 -x引數(顯示執行過程)
4)使用 . (空格)指令碼名稱來執行。 語法格式:. a.sh 不需要執行許可權(特別注意:第一個.後面有空格)
5)使用 source 來執行。 語法格式:source a.sh 不需要執行許可權(主要用於生效組態檔)

下面針對這5種方式,我們一起來看看它們的具體使用方式和區別吧!

正題

一、方式1絕對路徑和方式2相對路徑,可以歸納為同一種方法

注意:新建立的指令碼,預設沒有x執行許可權,需要給它用#chmod +x test.sh的方式,新增執行許可權。在生產環境中不要輕易的給檔案可執行許可權;

[root@centOS7 shell]# /root/test/shell/test.sh   #使用絕對路徑
hello word
[root@centOS7 shell]# ./test.sh  #使用相對路徑

二、方式3使用 sh/bash命令來執行

注意:該方式雖然不需要手動給指令碼新增x執行許可權,但是它會改變指令碼預設直譯器型別。比如說:指令碼首行定義的是#!/bin/bash,使用該方式,它會給你改用/bin/sh直譯器,也就說,最終效果=#!/bin/bash --posix

特別之處:該方式1.不需單獨給指令碼分配x執行許可權;2.甚至都不需要在指令碼首行宣告指令碼直譯器型別,因為指令碼是被當做該命令的引數使用的。

注:你可能會對/bin/bash和/bin/sh的區別感興趣,點選這裡

ls 
chomod -x test.sh  #給指令碼移除x執行許可權
ls
sh test.sh    #第3種方式執行
bash test.sh  #第3種方式執行

三、方式4使用 . (空格)指令碼名稱來執行

注:該方式,不需要單獨新增x執行許可權,它和source類似,許可權繼承與bash。

ls  #檢視指令碼(灰色的,說明沒有x可執行許可權)
. test.sh   #注意,點後面有個空格

四、方式5使用 source 來執行(主要用於生效組態檔)

ls  #檢視指令碼(灰色的,說明沒有x可執行許可權)
source test.sh   #該方式多用些操作,被修改後的組態檔(使之重新載入)

注意: 

.和source的許可權,繼承的是/bin/bash的許可權,在執行時也是將test.sh作為引數,並不需要test.sh有執行許可權;和bash執行不一樣的是,source和.不會建立子程序,是在當前shell程序下執行的,因為他們是內建命令,所以指令碼中賦值的本地變數也會影響當前shell的,用的時候一定要注意(儘量使用前面的3種方式)。

區別

1.關於執行許可權

僅前兩種(相對路徑、絕對路徑)方法,需要chmod +x test.sh,給指令碼單獨新增x執行許可權。後三種方法,均不需要單獨新增x執行許可權。

2.關於是否開啟子shell執行緒

前三種方法,指令碼執行時會開啟一個子shell環境,在子shell執行完後,子shell環境隨即關閉,然後又回到當前shell中。

後面兩種. 和source方式,則是在當前shell中執行,不會開啟子shell。

總結 

到此這篇關於shell指令碼5種執行方式及指令碼不同的執行方法和區別的文章就介紹到這了,更多相關shell指令碼執行方式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com