Shell最多⽀持多少个参数
本⽂转⾃:
这篇⽂章主要介绍了Shell最多⽀持多少个参数?本⽂是对Shell最多可以输⼊多少个参数的⼀篇测试⽂章,需要的朋友可以参考下
在脚本编写过程中,通常会涉及到参数的输⼊。譬如,sh 1.sh 10 20,在执⾏1.sh这个脚本中,10即为第⼀个参数,20即为第⼆个参数。有时,就会有这个疑惑,即shell脚本最多可以⽀持多少个变量呢?疑惑之余,编写了如下脚本,可求出Shell脚本中可输⼊参数的最⼤个数。
该脚本涉及到三个⼩脚本:1.sh 2.sh 3.sh --在这⾥为了⽅便,脚本名都是极其简单的。总的思路是给定⼀个特定的值n,作为输⼊参数的最⼤个数,然后将1,作为脚本的输⼊参数,这通过脚本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 -st
st
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
st
脚本2实现的功能是将1,$i作为3.sh的输⼊参数,同样,sed -i '2s/$/& '$i'/' 1.test实现的是将1,输出到⼀⾏。譬如如果$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实现的是追加参数到⼀⾏。
总结:
shell最简单脚本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 st,即每两秒查看⼀下2.test的内容,但该法有个弊端,数据较多时,⽆法在⼀个屏幕中显⽰,它只会显⽰前⾯固定的数据,新增的数据不会显⽰,但在该例中,我们更加关⼼的是数据是否增加。如下脚本可实现该功能:
复制代码代码如下:
#!/bin/bash
while true
do
st
sleep 30
done
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论