shell腳本5種執(zhí)行方式及腳本不同的執(zhí)行方法和區(qū)別詳解
前言
shell腳本是一種腳本語言,他不需要編譯,而是直接通過解釋器,將腳本作為解釋器程序的參數(shù)運(yùn)行的。
我們通過編寫vim test.sh,然后用不同方法執(zhí)行名為test.sh的腳本。
#!/bin/bash echo "hello word"
概述
1)使用絕對(duì)路徑執(zhí)行。
2)使用相對(duì)路徑執(zhí)行。語法格式:./a.sh
3)使用 sh或bash命令來執(zhí)行。語法格式: sh a.sh 不需要執(zhí)行權(quán)限 -x參數(shù)(顯示執(zhí)行過程)
4)使用 . (空格)腳本名稱來執(zhí)行。 語法格式:. a.sh 不需要執(zhí)行權(quán)限(特別注意:第一個(gè).后面有空格)
5)使用 source 來執(zhí)行。 語法格式:source a.sh 不需要執(zhí)行權(quán)限(主要用于生效配置文件)
下面針對(duì)這5種方式,我們一起來看看它們的具體使用方式和區(qū)別吧!
正題
一、方式1絕對(duì)路徑和方式2相對(duì)路徑,可以歸納為同一種方法
注意:新創(chuàng)建的腳本,默認(rèn)沒有x執(zhí)行權(quán)限,需要給它用#chmod +x test.sh的方式,添加執(zhí)行權(quán)限。在生產(chǎn)環(huán)境中不要輕易的給文件可執(zhí)行權(quán)限;
[root@centOS7 shell]# /root/test/shell/test.sh #使用絕對(duì)路徑 hello word [root@centOS7 shell]# ./test.sh #使用相對(duì)路徑

二、方式3使用 sh/bash命令來執(zhí)行
注意:該方式雖然不需要手動(dòng)給腳本添加x執(zhí)行權(quán)限,但是它會(huì)改變腳本默認(rèn)解釋器類型。比如說:腳本首行定義的是#!/bin/bash,使用該方式,它會(huì)給你改用/bin/sh解釋器,也就說,最終效果=#!/bin/bash --posix
特別之處:該方式1.不需單獨(dú)給腳本分配x執(zhí)行權(quán)限;2.甚至都不需要在腳本首行聲明腳本解釋器類型,因?yàn)槟_本是被當(dāng)做該命令的參數(shù)使用的。
注:你可能會(huì)對(duì)/bin/bash和/bin/sh的區(qū)別感興趣,點(diǎn)擊這里。
ls chomod -x test.sh #給腳本移除x執(zhí)行權(quán)限 ls sh test.sh #第3種方式運(yùn)行 bash test.sh #第3種方式運(yùn)行

三、方式4使用 . (空格)腳本名稱來執(zhí)行
注:該方式,不需要單獨(dú)添加x執(zhí)行權(quán)限,它和source類似,權(quán)限繼承與bash。
ls #查看腳本(灰色的,說明沒有x可執(zhí)行權(quán)限) . test.sh #注意,點(diǎn)后面有個(gè)空格

四、方式5使用 source 來執(zhí)行(主要用于生效配置文件)
ls #查看腳本(灰色的,說明沒有x可執(zhí)行權(quán)限) source test.sh #該方式多用些操作,被修改后的配置文件(使之重新加載)

注意:
.和source的權(quán)限,繼承的是/bin/bash的權(quán)限,在執(zhí)行時(shí)也是將test.sh作為參數(shù),并不需要test.sh有執(zhí)行權(quán)限;和bash執(zhí)行不一樣的是,source和.不會(huì)創(chuàng)建子進(jìn)程,是在當(dāng)前shell進(jìn)程下執(zhí)行的,因?yàn)樗麄兪莾?nèi)建命令,所以腳本中賦值的本地變量也會(huì)影響當(dāng)前shell的,用的時(shí)候一定要注意(盡量使用前面的3種方式)。

區(qū)別
1.關(guān)于執(zhí)行權(quán)限
僅前兩種(相對(duì)路徑、絕對(duì)路徑)方法,需要chmod +x test.sh,給腳本單獨(dú)添加x執(zhí)行權(quán)限。后三種方法,均不需要單獨(dú)添加x執(zhí)行權(quán)限。
2.關(guān)于是否開啟子shell線程
前三種方法,腳本執(zhí)行時(shí)會(huì)開啟一個(gè)子shell環(huán)境,在子shell執(zhí)行完后,子shell環(huán)境隨即關(guān)閉,然后又回到當(dāng)前shell中。
后面兩種. 和source方式,則是在當(dāng)前shell中執(zhí)行,不會(huì)開啟子shell。
總結(jié)
到此這篇關(guān)于shell腳本5種執(zhí)行方式及腳本不同的執(zhí)行方法和區(qū)別的文章就介紹到這了,更多相關(guān)shell腳本執(zhí)行方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS Stream release 9使用chrony服務(wù)同步時(shí)間的操作方法
這篇文章主要介紹了CentOS Stream release 9 使用chrony服務(wù)同步時(shí)間,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-04-04
Shell腳本實(shí)現(xiàn)自動(dòng)修改IP地址
這篇文章主要介紹了Shell腳本實(shí)現(xiàn)自動(dòng)修改IP地址,本文直接給出實(shí)現(xiàn)代碼,并在代碼中標(biāo)注大量注釋,需要的朋友可以參考下2014-10-10
詳解Linux定時(shí)任務(wù)Crontab的介紹與使用
linux內(nèi)置的cron進(jìn)程能幫我們實(shí)現(xiàn)這些需求,cron搭配shell腳本,非常復(fù)雜的指令也沒有問題。本文主要介紹了定時(shí)任務(wù)Crontab的使用,需要的可以學(xué)習(xí)一下2022-10-10

