手机
当前位置:查字典教程网 >脚本专栏 >linuxshell >Shell最多支持多少个参数?
Shell最多支持多少个参数?
摘要:在脚本编写过程中,通常会涉及到参数的输入。譬如,sh1.sh1020,在执行1.sh这个脚本中,10即为第一个参数,20即为第二个参数。有时...

在脚本编写过程中,通常会涉及到参数的输入。譬如,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脚本实现检测Cygwin最快的镜像站点

shell编程中的字符串截取方法小结

shell脚本实现ssh自动登录功能分享

Shell脚本实现监控MySQL主从同步

Shell脚本实现memcache缓存命中率监控

CentOS下对shell脚本加密的二种方法

基础的Linux Shell技巧小结

Shell脚本实现C语言代码行数统计

精品推荐
分类导航