• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Shell最多支持多少个参数?

    在脚本编写过程中,通常会涉及到参数的输入。譬如,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

    上一篇:Python执行Linux系统命令的4种方法
    下一篇:Shell脚本中判断输入参数个数的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Shell最多支持多少个参数? Shell,最多,支持,多少,个,