新聞中心
前言

“專業(yè)、務(wù)實(shí)、高效、創(chuàng)新、把客戶的事當(dāng)成自己的事”是我們每一個人一直以來堅(jiān)持追求的企業(yè)文化。 創(chuàng)新互聯(lián)建站是您可以信賴的網(wǎng)站建設(shè)服務(wù)商、專業(yè)的互聯(lián)網(wǎng)服務(wù)提供商! 專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)、設(shè)計(jì)服務(wù)業(yè)務(wù)。我們始終堅(jiān)持以客戶需求為導(dǎo)向,結(jié)合用戶體驗(yàn)與視覺傳達(dá),提供有針對性的項(xiàng)目解決方案,提供專業(yè)性的建議,創(chuàng)新互聯(lián)建站將不斷地超越自我,追逐市場,引領(lǐng)市場!
不同的script執(zhí)行方式會造成不一樣的結(jié)果,尤其對bash的環(huán)境影響很大,腳本的執(zhí)行方式有大概以下幾種方式。
首先寫一個簡單的test.sh文件:
#!/bin/bash read -p "Please input your first name:" firstname read -p "Please input your last name:" lastname echo -e "\nYour full name is: $firstname $lastname"
使用sh test.sh執(zhí)行
使用 sh test.sh 來執(zhí)行script文件,該方法標(biāo)明使用 sh 這種shell來執(zhí)行test.sh文件,sh已經(jīng)是一種被bash替代的shell,盡管我們在test.sh中聲明使用 #!/bin/bash 來執(zhí)行我們的文件,但此時使用sh而不是bash,則#!/bin/bash 已不起作用。
使用bash test.sh 執(zhí)行
該方法其實(shí)與 sh test.sh 的原理一樣,只是使用了 /bin/bash 該種shell來執(zhí)行我們的腳本文件。
所以,其實(shí)使用 dash test.sh’ 也是可以的,只是取決于自己想使用那種shell來執(zhí)行腳本,但sh、bash、dash三者有些許差別,對于部分關(guān)鍵字如 let,bash支持,而sh和dash并不支持,對于部分關(guān)鍵字則選擇使用bash。
使用點(diǎn) . 執(zhí)行
該種方式使用之前必須為文件添加執(zhí)行的權(quán)限:
$ chmod +x test.sh
添加完執(zhí)行權(quán)限之后,便可以使用 ./test.sh 來執(zhí)行腳本,該方式與 bash test.sh 是一樣的 ,默認(rèn)使用 bin/bash 來執(zhí)行我們的腳本。
只有該種執(zhí)行方式需要對文件添加執(zhí)行權(quán)限,其他方式并不需要。
使用source執(zhí)行
使用source則也能夠直接執(zhí)行我們的腳本:
source test.sh
區(qū)別
當(dāng)我們使用 sh test.sh 、bash test.sh 、 ./test.sh 執(zhí)行腳本的時候,該test.sh運(yùn)行腳本都會使用一個新的shell環(huán)境來執(zhí)行腳本內(nèi)的命令,也就是說,使用這3種方式時,其實(shí)script是在子進(jìn)程的shell內(nèi)執(zhí)行,當(dāng)子進(jìn)程完成后,子進(jìn)程內(nèi)的各項(xiàng)變量和操作將會結(jié)束而不會傳回到父進(jìn)程中。
無法理解??看下面例子:
[root@ubuntu] # bash test.sh
Please input your first name: yao <==輸入firstname
Please input your last name: pentonBin <==輸入lastname
Your full name is: yao pentonBin
[root@ubuntu] # echo $firstname
<==這里沒有輸出
如果使用source方法來執(zhí)行腳本呢?
[root@ubuntu] # source test.sh Please input your first name: yao <==輸入firstname Please input your last name: pentonBin <==輸入lastname Your full name is: yao pentonBin [root@ubuntu] # echo $firstname yao <==這里輸出firstname
也就是說,source方法執(zhí)行腳本是在父進(jìn)程中執(zhí)行的,test.sh的各項(xiàng)操作都會在原本的shell內(nèi)生效,這也是為什么不注銷系統(tǒng)而要讓某些寫入~/.bashrc的設(shè)置生效時,需要使用 source ~/.bashrc 而不能使用 bash ~/.bashrc
本篇文章到此結(jié)束,如果您有相關(guān)技術(shù)方面疑問可以聯(lián)系我們技術(shù)人員遠(yuǎn)程解決,感謝大家支持本站!
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
當(dāng)前題目:淺談ubuntu執(zhí)行.sh文件幾種方式區(qū)別
網(wǎng)址分享:http://www.dlmjj.cn/article/djesoji.html


咨詢
建站咨詢
