新聞中心

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),西疇企業(yè)網(wǎng)站建設(shè),西疇品牌網(wǎng)站建設(shè),網(wǎng)站定制,西疇網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,西疇網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
在新進(jìn)程中運(yùn)行 Shell 腳本
在新進(jìn)程中運(yùn)行 Shell 腳本有多種方法。
1) 將 Shell 腳本作為程序運(yùn)行
Shell 腳本也是一種解釋執(zhí)行的程序,可以在終端直接調(diào)用(需要使用 chmod 命令給 Shell 腳本加上執(zhí)行權(quán)限),如下所示:
[mozhiyan@localhost ~]$ cd demo #切換到 test.sh 所在的目錄 [mozhiyan@localhost demo]$ chmod +x ./test.sh #給腳本添加執(zhí)行權(quán)限 [mozhiyan@localhost demo]$ ./test.sh #執(zhí)行腳本文件 Hello World ! #運(yùn)行結(jié)果
第 2 行中,
chmod +x表示給 test.sh 增加執(zhí)行權(quán)限。
第 3 行中,
./表示當(dāng)前目錄,整條命令的意思是執(zhí)行當(dāng)前目錄下的 test.sh 腳本。如果不寫(xiě)
./,Linux 會(huì)到系統(tǒng)路徑(由 PATH 環(huán)境變量指定)下查找 test.sh,而系統(tǒng)路徑下顯然不存在這個(gè)腳本,所以會(huì)執(zhí)行失敗。
通過(guò)這種方式運(yùn)行腳本,腳本文件第一行的
#!/bin/bash一定要寫(xiě)對(duì),好讓系統(tǒng)查找到正確的解釋器。
2) 將 Shell 腳本作為參數(shù)傳遞給 Bash 解釋器
你也可以直接運(yùn)行 Bash 解釋器,將腳本文件的名字作為參數(shù)傳遞給 Bash,如下所示:
[mozhiyan@localhost ~]$ cd demo #切換到 test.sh 所在的目錄 [mozhiyan@localhost demo]$ /bin/bash test.sh #使用Bash的絕對(duì)路徑 Hello World ! #運(yùn)行結(jié)果
通過(guò)這種方式運(yùn)行腳本,不需要在腳本文件的第一行指定解釋器信息,寫(xiě)了也沒(méi)用。
更加簡(jiǎn)潔的寫(xiě)法是運(yùn)行 bash 命令。bash 是一個(gè)外部命令,Shell 會(huì)在 /bin 目錄中找到對(duì)應(yīng)的應(yīng)用程序,也即 /bin/bash,這點(diǎn)我們已在《Shell命令的本質(zhì)到底是什么》一節(jié)中提到。
[mozhiyan@localhost ~]$ cd demo [mozhiyan@localhost demo]$ bash test.sh Hello World !
這兩種寫(xiě)法在本質(zhì)上是一樣的:第一種寫(xiě)法給出了絕對(duì)路徑,會(huì)直接運(yùn)行 Bash 解釋器;第二種寫(xiě)法通過(guò) bash 命令找到 Bash 解釋器所在的目錄,然后再運(yùn)行,只不過(guò)多了一個(gè)查找的過(guò)程而已。
檢測(cè)是否開(kāi)啟了新進(jìn)程
有些讀者可能會(huì)疑問(wèn),你怎么知道開(kāi)啟了新進(jìn)程?你有什么證據(jù)嗎?既然如此,那我就來(lái)給大家驗(yàn)證一下吧。
Linux 中的每一個(gè)進(jìn)程都有一個(gè)唯一的 ID,稱為 PID,使用
$$變量就可以獲取當(dāng)前進(jìn)程的 PID。
$$是 Shell 中的特殊變量,稍后我會(huì)在《Shell特殊變量》一節(jié)中展開(kāi)講解,讀者在此不必深究。
首先編寫(xiě)如下的腳本文件,并命名為 check.sh:
#!/bin/bash echo $$ #輸出當(dāng)前進(jìn)程PID
然后使用以上兩種方式來(lái)運(yùn)行 check.sh:
[mozhiyan@localhost demo]$ echo $$ 2861 #當(dāng)前進(jìn)程的PID [mozhiyan@localhost demo]$ chmod +x ./check.sh [mozhiyan@localhost demo]$ ./check.sh 4597 #新進(jìn)程的PID [mozhiyan@localhost demo]$ echo $$ 2861 #當(dāng)前進(jìn)程的PID [mozhiyan@localhost demo]$ /bin/bash check.sh 4584 #新進(jìn)程的PID
你看,進(jìn)程的 PID 都不一樣,當(dāng)然就是兩個(gè)進(jìn)程了。
在當(dāng)前進(jìn)程中運(yùn)行 Shell 腳本
這里需要引入一個(gè)新的命令——source 命令。source 是 Shell 內(nèi)置命令的一種,它會(huì)讀取腳本文件中的代碼,并依次執(zhí)行所有語(yǔ)句。你也可以理解為,source 命令會(huì)強(qiáng)制執(zhí)行腳本文件中的全部命令,而忽略腳本文件的權(quán)限。
source 命令的用法為:
source filename
也可以簡(jiǎn)寫(xiě)為:
. filename
兩種寫(xiě)法的效果相同。對(duì)于第二種寫(xiě)法,注意點(diǎn)號(hào)
.和文件名中間有一個(gè)空格。
例如,使用 source 運(yùn)行上節(jié)的 test.sh:
[mozhiyan@localhost ~]$ cd demo #切換到test.sh所在的目錄 [mozhiyan@localhost demo]$ source ./test.sh #使用source Hello World ! [mozhiyan@localhost demo]$ source test.sh #使用source Hello World ! [mozhiyan@localhost demo]$ . ./test.sh #使用點(diǎn)號(hào) Hello World ! [mozhiyan@localhost demo]$ . test.sh #使用點(diǎn)號(hào) Hello World !
你看,使用 source 命令不用給腳本增加執(zhí)行權(quán)限,并且寫(xiě)不寫(xiě)
./都行,是不是很方便呢?
檢測(cè)是否在當(dāng)前 Shell 進(jìn)程中
我們?nèi)匀唤柚?br />
$$變量來(lái)輸出進(jìn)程的 PID,如下所示:
[mozhiyan@localhost ~]$ cd demo [mozhiyan@localhost demo]$ echo $$ 5169 #當(dāng)前進(jìn)程PID [mozhiyan@localhost demo]$ source ./check.sh 5169 #Shell腳本所在進(jìn)程PID [mozhiyan@localhost demo]$ echo $$ 5169 #當(dāng)前進(jìn)程PID [mozhiyan@localhost demo]$ . ./check.sh 5169 #Shell腳本所在進(jìn)程PID
你看,進(jìn)程的 PID 都是一樣的,當(dāng)然是同一個(gè)進(jìn)程了。
總結(jié)
作為初學(xué)者,你可能看不懂這些運(yùn)行方式有什么區(qū)別,沒(méi)關(guān)系,暫時(shí)先留個(gè)疑問(wèn)吧,后續(xù)教程中我們會(huì)逐一講解。
如果需要在新進(jìn)程中運(yùn)行 Shell 腳本,我一般使用
bash test.sh這種寫(xiě)法;如果在當(dāng)前進(jìn)程中運(yùn)行 Shell 腳本,我一般使用
. ./test.sh這種寫(xiě)法。這是我個(gè)人的風(fēng)格。
最后再給大家演示一個(gè)稍微復(fù)雜的例子。本例中使用 read 命令從鍵盤(pán)讀取用戶輸入的內(nèi)容并賦值給 URL 變量,最后在顯示器上輸出。
#!/bin/bash # Copyright (c) http://c.biancheng.net/shell/ echo "What is the url of the shell tutorial?" read URL echo "$URL is very fast!"
運(yùn)行腳本:
[mozhiyan@localhost demo]$ . ./test.sh What is the url of the shell tutorial? http://c.biancheng.net/shell/↙ http://c.biancheng.net/shell/ is very fast!
↙ 表示按下回車鍵。
分享名稱:執(zhí)行Shell腳本(多種方法)
文章路徑:http://fisionsoft.com.cn/article/dphopec.html


咨詢
建站咨詢
