shell脚本:参数太多

shell脚本:参数太多
#!/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 )

相关内容