新聞中心

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


咨詢
建站咨詢
