![shell脚本:参数太多](https://linux22.com/image/107167/shell%E8%84%9A%E6%9C%AC%EF%BC%9A%E5%8F%82%E6%95%B0%E5%A4%AA%E5%A4%9A.png)
#!/usr/bin/ksh
i=1
while [ "$i" -lt 121 ]
do
if [ $i -lt 100 ]
then
if [ $i -lt 10 ]
then
i=00$i
else
i=0$1
fi
fi
echo "fla${i}"
i=' expr $i+1 '
done
exit 0
为什么此脚本会导致错误“参数过多”?
答案1
i=' expr $i+1 '
不递增i
,它分配i
一个值“expr $i+1”。
在您运行的循环的下一次迭代中[ $i -lt 100 ]
。由于i
不包含在双引号中,因此它扩展为[ expr '$i+1' -lt 100 ]
. [
实际上是一个命令,由于上述原因,你给了它太多的参数。
如果您替换i=' expr $i+1 '
为i=$(($i + 1))
,您的代码应该可以工作。
编辑:
看来至少 Bash 对数字 008 会有问题,它将其解释为八进制。如果在 008 之后出现一些错误,则需要将00$i
,0$i
和分配$i
给另一个变量(或等)。echo "fla00$i"
在这种情况下,当 i >= 100 时,您需要执行某些操作。
这就是我要做的:
i=1
while [ $i -lt 121 ]; do
if [ $i -ge 100 ]; then
echo fla$i
elif [ $i -ge 10 ]; then
echo fla0$i
else
echo fla00$i
fi
i=$(($i + 1))
done
答案2
您的整个脚本的目的就是这样做:seq -f 'fla%03.0f' 1 128
关于shell编程:
i=0$1
可能应该成为i="0$i"
' expr $i+1 '
应该成为$( expr "$i" + 1 )
请注意 所需的空格expr
。这行不通$( expr "$i"+1 )