Expressão inteira esperada bash 2

0

Estou apenas aprendendo scripts de bash. Tentei classificar o array, ele diz "expressão inteira esperada para as linhas 10 e 15. O que estou fazendo de errado? Aqui está o meu script:

#!/bin/bash
array=('5' '9' '0' '20' '2' '15' '6' '25' '1')
b=0
n=${#array[@]}
i=0
while [ "$i" -lt "$n" ]
do
    c=${array[$i]}
    d=${array[$i+1]}
    if [ "$c" -lt "$d" ]; then
        j=0
        while [ "$j" -le "$i" ]
        do
            f=${b[$j]}
                if [ "$f" -gt "$c" ];
                    then b[$j]=$c
                    echo "${b[$j]}"
                fi
            j=$(( j+1 ))
        done
    fi
    i=$(( i+1 ))
done
    
por Anna 04.05.2018 / 11:13

1 resposta

3

Você está chamando o comando [ com os operadores de comparação de número inteiro -lt / -gt em operandos que nem sempre são inteiros decimais.

Você pode ver o que acontece se você executar o script com bash -x . Você verá coisas como:

+ f=
+ '[' '' -gt 0 ']'
./myscript: line 15: [: : integer expression expected

Com:

while [ "$i" -lt "$n" ]
do
[...]
   d=${array[$i+1]}

Na última passagem desse loop, você tentará acessar além do último elemento da matriz, então $d estará vazio.

Você também está inicializando $b como uma string 0 e, mais tarde, acessando-a como uma matriz. Veja também como f=${b[$j]} obterá um $f vazio, exceto quando $j for 0.

Eu não sei o que você está tentando fazer com esse código, mas parece que você precisa voltar para a prancheta.

    
por 04.05.2018 / 15:38