婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Shell最多支持多少個參數?

Shell最多支持多少個參數?

熱門標簽:東莞電銷機器人價格一覽表 地圖標注超出范圍怎么辦 杭州機器人外呼系統 百度地圖標注圖標更換 excel地址地圖標注 百度地圖的地圖標注 陜西電銷卡外呼系統怎么安裝 旅游地圖標注大全 佛山高德地圖標注中心

在腳本編寫過程中,通常會涉及到參數的輸入。譬如,sh 1.sh 10 20,在執行1.sh這個腳本中,10即為第一個參數,20即為第二個參數。有時,就會有這個疑惑,即shell腳本最多可以支持多少個變量呢?疑惑之余,編寫了如下腳本,可求出Shell腳本中可輸入參數的最大個數。

該腳本涉及到三個小腳本:1.sh 2.sh 3.sh --在這里為了方便,腳本名都是極其簡單的。總的思路是給定一個特定的值n,作為輸入參數的最大個數,然后將1,2,3...n作為腳本的輸入參數,這通過腳本2.sh來實現,接著原樣輸出這些參數。如果這些參數全部都能輸出,即代表給定的n是合理的。這通過腳本3.sh來實現。1.sh實現的功能是通過一個死循環,遞增生成n,通過引用2.sh來判定n是否合理。具體可見如下腳本。

首先我們來看看第一個腳本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

該腳本主要是提供了一個死循環,$i指的是可輸入參數的個數,2.sh用于判定給定參數的個數是否合理,如果合理,則將該數值追加到currnumber這個文件中,如果不合理,則代表$i-1是shell能接受的最大參數個數。則將該數值輸出到maxnumber文件中。

currnumber文件的應用便于檢測腳本的執行情況。原打算是echo $i >> currnumber,即每一個合理的數值都輸出一行,考慮到文件有最大行數的限制,在這里,就將數值輸出到一行。sed -i '1s/$/ '$i'/' currnumber即實現該功能,將$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實現的功能是將1,2,3...$i作為3.sh的輸入參數,同樣,sed -i '2s/$/ '$i'/' 1.test實現的是將1,2,3...n輸出到一行。譬如如果$num=10,則1.test的內容如下所示:

復制代碼 代碼如下:

#!/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

該腳本實現的是原樣輸出輸入參數,并將該輸入參數輸出到2.test中。同樣,sed -i '1s/$/ '$i'/' 2.test實現的是追加參數到一行。

總結:

1> sh 1.sh即可求出shell腳本允許的最大輸入參數個數。

2> 因條件有限,沒有具體求出該值。但我們可跳過1.sh,單純的通過2.sh來判定特定的數值。如,sh 2.sh 100000,經測試100000個輸入參數沒有問題。

3> 該腳本的亮點是如何將特定的值追加到行尾,這主要通過sed -i '1s/$/ '$i'/' 2.test來實現,其實1s代表第一行。$代表行尾。

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

5> shift左移輸入參數的位置。默認是左移1位。如shift 3表示原來的$4現在變成$1,原來的$5現在變成$2等等,原來的$1、$2、$3丟棄,$0不移動。

6> 該腳本存在一個隱患,即文本文件的行有最大的字符限制。但將100000作為輸入參數個數進行測試時,沒有問題,說明文本文件一行還是能容納相當數量的字符。

PS: 在監測2.test的結果時,我們可以用watch cat 2.test,即每兩秒查看一下2.test的內容,但該法有個弊端,數據較多時,無法在一個屏幕中顯示,它只會顯示前面固定的數據,新增的數據不會顯示,但在該例中,我們更加關心的是數據是否增加。如下腳本可實現該功能:

復制代碼 代碼如下:

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

標簽:南充 通遼 雅安 隨州 延邊 青島 朝陽 西藏

巨人網絡通訊聲明:本文標題《Shell最多支持多少個參數?》,本文關鍵詞  Shell,最多,支持,多少,個,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Shell最多支持多少個參數?》相關的同類信息!
  • 本頁收集關于Shell最多支持多少個參數?的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 广元市| 临夏市| 田林县| 文昌市| 沾益县| 潼关县| 麻江县| 沿河| 西华县| 黄梅县| 榆中县| 越西县| 道真| 华亭县| 长兴县| 台安县| 琼海市| 镇宁| 都安| 赞皇县| 泾川县| 汶上县| 临武县| 北流市| 兴仁县| 蛟河市| 渑池县| 和硕县| 方城县| 赫章县| 洪洞县| 隆昌县| 台前县| 凌海市| 广饶县| 南澳县| 胶南市| 全椒县| 蒙城县| 兴文县| 佛冈县|