shell script: muitos argumentos

0
#!/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

Por que esse script resulta em um erro "Muitos argumentos"?

    
por user2310119 09.03.2017 / 11:05

2 respostas

2

i=' expr $i+1 ' não está incrementando i , atribui i o valor de 'expr $ i + 1'.

Na próxima iteração do loop você executa [ $i -lt 100 ] . Como i não é incluído entre aspas duplas, isso se expande para [ expr '$i+1' -lt 100 ] . [ é na verdade um comando, e você deu muitos argumentos devido ao motivo acima.

Se você substituir i=' expr $i+1 ' por i=$(($i + 1)) , seu código deverá funcionar.

Editar:

Parece que, pelo menos, o Bash terá problemas com o número 008, ele o interpreta como octal. Você precisa atribuir 00$i , 0$i e $i a outra variável (ou echo "fla00$i" etc) se ocorrer algum erro após 008.

Nesse caso, você precisará fazer algo quando i > = 100.

Isso é o que eu faria:

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
    
por 09.03.2017 / 11:18
1

Toda a intenção do script é fazer exatamente isso: seq -f 'fla%03.0f' 1 128

Quanto à programação da shell:

i=0$1 provavelmente deve se tornar i="0$i"

' expr $i+1 ' deve se tornar $( expr "$i" + 1 )

Anote os espaços requeridos por expr . Isso não funcionará $( expr "$i"+1 )

    
por 09.03.2017 / 11:22