本篇內(nèi)容介紹了“如何知道Shell最多支持多少個(gè)參數(shù)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
為朝陽等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及朝陽網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、朝陽網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!在腳本編寫過程中,通常會(huì)涉及到參數(shù)的輸入。譬如,sh 1.sh 10 20,在執(zhí)行1.sh這個(gè)腳本中,10即為第一個(gè)參數(shù),20即為第二個(gè)參數(shù)。有時(shí),就會(huì)有這個(gè)疑惑,即shell腳本最多可以支持多少個(gè)變量呢?疑惑之余,編寫了如下腳本,可求出Shell腳本中可輸入?yún)?shù)的較大個(gè)數(shù)。
該腳本涉及到三個(gè)小腳本:1.sh 2.sh 3.sh --在這里為了方便,腳本名都是極其簡單的??偟乃悸肥墙o定一個(gè)特定的值n,作為輸入?yún)?shù)的較大個(gè)數(shù),然后將1,2,3...n作為腳本的輸入?yún)?shù),這通過腳本2.sh來實(shí)現(xiàn),接著原樣輸出這些參數(shù)。如果這些參數(shù)全部都能輸出,即代表給定的n是合理的。這通過腳本3.sh來實(shí)現(xiàn)。1.sh實(shí)現(xiàn)的功能是通過一個(gè)死循環(huán),遞增生成n,通過引用2.sh來判定n是否合理。具體可見如下腳本。
首先我們來看看第一個(gè)腳本1.sh
代碼如下:
#!/bin/bash
i=0
echo 0 > currnumber
while true
do
i=$[$i+1]
sh 2.sh $i
if [ $? -ne 0 ];then
echo $i > maxnumber
exit 1
else
sed -i '1s/$/& '$i'/' currnumber
fi
done
該腳本主要是提供了一個(gè)死循環(huán),$i指的是可輸入?yún)?shù)的個(gè)數(shù),2.sh用于判定給定參數(shù)的個(gè)數(shù)是否合理,如果合理,則將該數(shù)值追加到currnumber這個(gè)文件中,如果不合理,則代表$i-1是shell能接受的較大參數(shù)個(gè)數(shù)。則將該數(shù)值輸出到maxnumber文件中。
currnumber文件的應(yīng)用便于檢測腳本的執(zhí)行情況。原打算是echo $i >> currnumber,即每一個(gè)合理的數(shù)值都輸出一行,考慮到文件有較大行數(shù)的限制,在這里,就將數(shù)值輸出到一行。sed -i '1s/$/& '$i'/' currnumber即實(shí)現(xiàn)該功能,將$i的值添加到行尾。
再來看看腳本2.sh
代碼如下:
#!/bin/bash
rm -f 1.test
touch 1.test
num=$1
echo "#!/bin/bash" > 1.test
echo "sh 3.sh" >> 1.test
for ((i=1; i<=$num; i++))
do
sed -i '2s/$/& '$i'/' 1.test
done
sh 1.test
腳本2實(shí)現(xiàn)的功能是將1,2,3...$i作為3.sh的輸入?yún)?shù),同樣,sed -i '2s/$/& '$i'/' 1.test實(shí)現(xiàn)的是將1,2,3...n輸出到一行。譬如如果$num=10,則1.test的內(nèi)容如下所示:
代碼如下:
#!/bin/bash
sh 3.sh 1 2 3 4 5 6 7 8 9 10
最后我們來看看腳本3.sh
代碼如下:
#!/bin/bash
echo 0 > 2.test
num=$#
for ((i=1;i<=$num;i++))
do
sed -i '1s/$/& '$i'/' 2.test
shift 1
done
該腳本實(shí)現(xiàn)的是原樣輸出輸入?yún)?shù),并將該輸入?yún)?shù)輸出到2.test中。同樣,sed -i '1s/$/& '$i'/' 2.test實(shí)現(xiàn)的是追加參數(shù)到一行。
總結(jié):
1> sh 1.sh即可求出shell腳本允許的較大輸入?yún)?shù)個(gè)數(shù)。
2> 因條件有限,沒有具體求出該值。但我們可跳過1.sh,單純的通過2.sh來判定特定的數(shù)值。如,sh 2.sh 100000,經(jīng)測試100000個(gè)輸入?yún)?shù)沒有問題。
3> 該腳本的亮點(diǎn)是如何將特定的值追加到行尾,這主要通過sed -i '1s/$/& '$i'/' 2.test來實(shí)現(xiàn),其實(shí)1s代表第一行。$代表行尾。
4> 在vim中,0可跳到行首,$可跳到行尾。
5> shift左移輸入?yún)?shù)的位置。默認(rèn)是左移1位。如shift 3表示原來的$4現(xiàn)在變成$1,原來的$5現(xiàn)在變成$2等等,原來的$1、$2、$3丟棄,$0不移動(dòng)。
6> 該腳本存在一個(gè)隱患,即文本文件的行有較大的字符限制。但將100000作為輸入?yún)?shù)個(gè)數(shù)進(jìn)行測試時(shí),沒有問題,說明文本文件一行還是能容納相當(dāng)數(shù)量的字符。
PS: 在監(jiān)測2.test的結(jié)果時(shí),我們可以用watch cat 2.test,即每兩秒查看一下2.test的內(nèi)容,但該法有個(gè)弊端,數(shù)據(jù)較多時(shí),無法在一個(gè)屏幕中顯示,它只會(huì)顯示前面固定的數(shù)據(jù),新增的數(shù)據(jù)不會(huì)顯示,但在該例中,我們更加關(guān)心的是數(shù)據(jù)是否增加。如下腳本可實(shí)現(xiàn)該功能:
代碼如下:
#!/bin/bash
while true
do
cat 2.test
sleep 30
done
“如何知道Shell最多支持多少個(gè)參數(shù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
名稱欄目:如何知道Shell最多支持多少個(gè)參數(shù)-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.rwnh.cn/article48/copeep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、App開發(fā)、品牌網(wǎng)站建設(shè)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容