麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 開(kāi)發(fā) > Linux Shell > 正文

Shell最多支持多少個(gè)參數(shù)?

2020-07-27 19:13:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在腳本編寫過(guò)程中,通常會(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 --在這里為了方便,腳本名都是極其簡(jiǎn)單的。總的思路是給定一個(gè)特定的值n,作為輸入?yún)?shù)的最大個(gè)數(shù),然后將1,2,3...n作為腳本的輸入?yún)?shù),這通過(guò)腳本2.sh來(lái)實(shí)現(xiàn),接著原樣輸出這些參數(shù)。如果這些參數(shù)全部都能輸出,即代表給定的n是合理的。這通過(guò)腳本3.sh來(lái)實(shí)現(xiàn)。1.sh實(shí)現(xiàn)的功能是通過(guò)一個(gè)死循環(huán),遞增生成n,通過(guò)引用2.sh來(lái)判定n是否合理。具體可見(jiàn)如下腳本。

首先我們來(lái)看看第一個(gè)腳本1.sh

復(fù)制代碼 代碼如下:

#!/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)用便于檢測(cè)腳本的執(zhí)行情況。原打算是echo $i >> currnumber,即每一個(gè)合理的數(shù)值都輸出一行,考慮到文件有最大行數(shù)的限制,在這里,就將數(shù)值輸出到一行。sed -i '1s/$/& '$i'/' currnumber即實(shí)現(xiàn)該功能,將$i的值添加到行尾。

再來(lái)看看腳本2.sh

復(fù)制代碼 代碼如下:

#!/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)容如下所示:

復(fù)制代碼 代碼如下:

#!/bin/bash
sh 3.sh 1 2 3 4 5 6 7 8 9 10

最后我們來(lái)看看腳本3.sh

復(fù)制代碼 代碼如下:

#!/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> 因條件有限,沒(méi)有具體求出該值。但我們可跳過(guò)1.sh,單純的通過(guò)2.sh來(lái)判定特定的數(shù)值。如,sh 2.sh 100000,經(jīng)測(cè)試100000個(gè)輸入?yún)?shù)沒(méi)有問(wèn)題。

3> 該腳本的亮點(diǎn)是如何將特定的值追加到行尾,這主要通過(guò)sed -i '1s/$/& '$i'/' 2.test來(lái)實(shí)現(xiàn),其實(shí)1s代表第一行。$代表行尾。

4> 在vim中,0可跳到行首,$可跳到行尾。

5> shift左移輸入?yún)?shù)的位置。默認(rèn)是左移1位。如shift 3表示原來(lái)的$4現(xiàn)在變成$1,原來(lái)的$5現(xiàn)在變成$2等等,原來(lái)的$1、$2、$3丟棄,$0不移動(dòng)。

6> 該腳本存在一個(gè)隱患,即文本文件的行有最大的字符限制。但將100000作為輸入?yún)?shù)個(gè)數(shù)進(jìn)行測(cè)試時(shí),沒(méi)有問(wèn)題,說(shuō)明文本文件一行還是能容納相當(dāng)數(shù)量的字符。

PS: 在監(jiān)測(cè)2.test的結(jié)果時(shí),我們可以用watch cat 2.test,即每?jī)擅氩榭匆幌?.test的內(nèi)容,但該法有個(gè)弊端,數(shù)據(jù)較多時(shí),無(wú)法在一個(gè)屏幕中顯示,它只會(huì)顯示前面固定的數(shù)據(jù),新增的數(shù)據(jù)不會(huì)顯示,但在該例中,我們更加關(guān)心的是數(shù)據(jù)是否增加。如下腳本可實(shí)現(xiàn)該功能:

復(fù)制代碼 代碼如下:

#!/bin/bash
while true
do
   cat 2.test
   sleep 30
done

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人羞羞视频在线观看免费 | 久久影院一区二区三区 | 国产精品爱久久久久久久 | 91成人影院| 亚洲xxx在线观看 | 欧美性生活视频免费 | 九九久久视频 | 久久久久久久一区二区三区 | caoporn国产一区二区 | 日韩精品无码一区二区三区 | 国产在线免 | 在线观看中文字幕国产 | 九九热精品在线 | 欧美成人一级片 | 青草久久av| 最近高清无吗免费看 | 外国一级黄色片 | 精品一区二区久久久 | 毛片在线不卡 | 本站只有精品 | 久久成人免费网 | 成人羞羞视频在线观看 | 国产91免费看 | 国产一区二区在线观看视频 | 国产免费一级淫片a级中文 99国产精品自拍 | 精国产品一区二区三区 | 欧美成人免费看 | 国产一区二区亚洲 | 黄色小视频在线免费看 | 九九视频在线观看黄 | 色屁屁xxxxⅹ免费视频 | 草草视频免费 | 久在线观看福利视频69 | 黄色网址在线免费播放 | 色猫av | v11av在线播放 | 日本网站一区 | 欧美一级性| 美国av在线免费观看 | 性欧美极品xxxx欧美一区二区 | 毛片免费大全短视频 |