Застрял в цикле while в GNU/SU (сейсмический Unix)
Я новичок в программировании. У меня есть этот цикл (это часть скрипта обработки данных), и у меня все хорошо до этого раздела, потому что я не могу понять, почему он продолжает работать во втором 'while'
Взглянуть:
... / Баш
cdpmin = 1800
cdpmax = 2100
DCDP =100
Ю = $ cdpminwhile [$ cdp -le $ cdpmax]
делать
echo $ cdp
ок = ложьпока [ок = ложь]
делать
,
,
,
эхо "Это правильно? (да / нет)" | tr -d "\012" >/dev/tty
читать ответcase $response in n*) ok=false ;; *) ok=true ;; esac
сделанный
ЕТ =$[$ ЮТ +$ DCDP]
сделанный
большое спасибо
1 ответ
Вы не сравниваете то, что вы думаете, вы сравниваете буквальное "хорошо" со словом "ложь". Вместо этого вам нужно сравнить переменную $ok
с false
,
С этой настройкой это будет выглядеть так:
ok="false"
while [[ "$ok" = "false" ]]
do
...
done
Я полагаю, что вы также столкнетесь с ошибкой cdp=$[$cdp + $dcpd]
В bash дополнение обычно выглядит так:
cdp=$(($cdp + $dcpd))
Совет: поскольку условие для цикла, в котором вы застряли, было ok=false
Ясно, что проблема в состоянии не меняется, как вы ожидаете. Это одна из тех проблем, которые легко упускать из виду, хотя это фактический факт. Каждый раз, когда я сталкиваюсь с этим, я иду на прогулку или что-то, чтобы отвлечься от этого. Чаще всего, когда я возвращаюсь - проблема очевидна.