1

Я новичок в программировании. У меня есть этот цикл (он является частью сценария обработки данных), и у меня все хорошо до этого раздела, потому что я не могу понять, почему он остается цикличным во втором 'while'

Взглянуть:

.../ Баш
cdpmin = 1800
cdpmax = 2100
DCDP = 100
Ю = $ cdpmin

в то время как [$ cdp -le $ cdpmax]
делать
echo $ cdp
ок = ложь

пока [ок = ложь]
делать
,
,
,
echo "Это правильно? (y/ n) "| tr -d"\012 ">/ dev/ tty
читать ответ

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

сделанный

ЕТ = $ [$ ЮТ +$ DCDP]

сделанный

большое спасибо

1 ответ1

4

Вы не сравниваете то, что вы думаете, вы сравниваете буквальное "хорошо" со словом "ложь". Вместо этого вам нужно сравнить переменную $ok с false .

С этой настройкой это будет выглядеть так:

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

Я полагаю, что вы также столкнетесь с ошибкой cdp=$[$cdp + $dcpd] , в bash дополнение обычно выглядит так:

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

Совет: поскольку условие для цикла, в котором вы застряли, было в ok=false , ясно, что проблема в том, что условие не меняется, как вы ожидаете. Это одна из тех проблем, которые легко упускать из виду, хотя это фактический факт. Каждый раз, когда я сталкиваюсь с этим, я иду на прогулку или что-то, чтобы отвлечься от этого. Чаще всего, когда я возвращаюсь - проблема очевидна.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .