日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
執(zhí)行Shell腳本(多種方法)
上節(jié)我們編寫了一個(gè)簡(jiǎn)單的 Shell 腳本,這節(jié)我們就讓它運(yùn)行起來(lái)。運(yùn)行 Shell 腳本有兩種方法,一種在新進(jìn)程中運(yùn)行,一種是在當(dāng)前 Shell 進(jìn)程中運(yùn)行。

成都創(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 腳本。如果不寫
./,Linux 會(huì)到系統(tǒng)路徑(由 PATH 環(huán)境變量指定)下查找 test.sh,而系統(tǒng)路徑下顯然不存在這個(gè)腳本,所以會(huì)執(zhí)行失敗。

通過(guò)這種方式運(yùn)行腳本,腳本文件第一行的
#!/bin/bash一定要寫對(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)行腳本,不需要在腳本文件的第一行指定解釋器信息,寫了也沒用。

更加簡(jiǎn)潔的寫法是運(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 !

這兩種寫法在本質(zhì)上是一樣的:第一種寫法給出了絕對(duì)路徑,會(huì)直接運(yùn)行 Bash 解釋器;第二種寫法通過(guò) bash 命令找到 Bash 解釋器所在的目錄,然后再運(yùn)行,只不過(guò)多了一個(gè)查找的過(guò)程而已。

檢測(cè)是否開啟了新進(jìn)程

有些讀者可能會(huì)疑問,你怎么知道開啟了新進(jìn)程?你有什么證據(jù)嗎?既然如此,那我就來(lái)給大家驗(yàn)證一下吧。

Linux 中的每一個(gè)進(jìn)程都有一個(gè)唯一的 ID,稱為 PID,使用
$$變量就可以獲取當(dāng)前進(jìn)程的 PID。
$$是 Shell 中的特殊變量,稍后我會(huì)在《Shell特殊變量》一節(jié)中展開講解,讀者在此不必深究。

首先編寫如下的腳本文件,并命名為 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)寫為:

. filename

兩種寫法的效果相同。對(duì)于第二種寫法,注意點(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)限,并且寫不寫
./都行,是不是很方便呢?

檢測(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ū)別,沒關(guān)系,暫時(shí)先留個(gè)疑問吧,后續(xù)教程中我們會(huì)逐一講解。

如果需要在新進(jìn)程中運(yùn)行 Shell 腳本,我一般使用
bash test.sh這種寫法;如果在當(dāng)前進(jìn)程中運(yùn)行 Shell 腳本,我一般使用
. ./test.sh這種寫法。這是我個(gè)人的風(fēng)格。

最后再給大家演示一個(gè)稍微復(fù)雜的例子。本例中使用 read 命令從鍵盤讀取用戶輸入的內(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!

↙ 表示按下回車鍵。


網(wǎng)站欄目:執(zhí)行Shell腳本(多種方法)
網(wǎng)站URL:http://www.dlmjj.cn/article/dphopec.html