Preso em loop while no GNU / SU (unix sísmico)

1

Eu sou novo em programação. Eu tenho esse loop (é parte de um script de processamento de dados) e eu tenho tudo de bom até esta seção porque eu não consigo descobrir por que ele fica em loop no segundo 'while'

Dê uma olhada:

.../bash
cdpmin=1800
cdpmax=2100
dcdp=100
cdp=$cdpmin

while [ $cdp -le $cdpmax ]
do
echo $cdp
ok=false

while [ ok=false ]
do
.
.
.
echo "It's correct? (y/n)" | tr -d "2" >/dev/tty
read response

case $response in  
    n*)   
       ok=false ;;  
    *)   
       ok=true ;;  
esac   
         

feito   

     

cdp = $ [$ cdp + $ dcdp]

     

concluído

Muito obrigado

    
por Angel 10.09.2013 / 16:52

1 resposta

4

Você não está comparando o que pensa que é, está comparando o literal "ok" com a palavra "false". Em vez disso, você precisa comparar a variável $ok com false .

Com esse ajuste, seria parecido com:

ok="false"
while [[ "$ok" = "false" ]]
do
    ...
done

Acredito que você também terá um erro com cdp=$[$cdp + $dcpd] , no bash, além disso, a aparência geralmente é:

cdp=$(($cdp + $dcpd))

Uma dica: como a condição do loop em que você estava preso era ok=false , está claro que o problema está na condição de não mudar conforme o esperado. Este é um daqueles fáceis de ignorar questões que é uma palma da cara depois do fato. Toda vez que eu me deparo com isso, eu vou dar uma volta ou algo para tirar minha mente disso. Mais frequentemente do que não, quando eu volto - a questão é óbvia.

    
por 10.09.2013 / 17:03