陷入 GNU/SU (seismic unix) 中的 while 循环

陷入 GNU/SU (seismic unix) 中的 while 循环

我是编程新手。我有这个循环(它是数据处理脚本的一部分),一切都很好,直到这一部分,因为我不明白为什么它在第二个“while”中保持循环

看一看:

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

当 [ $cdp -le $cdpmax ]
执行
echo $cdp
ok=false

while [ ok=false ]
do
.
.
.
echo "正确吗? (y/n)" | tr -d "\012" >/dev/tty
读取响应

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

完毕

cdp=$[$cdp+$dcdp]

完毕

多谢

答案1

你不是在比较你认为的是什么,而是在比较文字“ok”和单词“false”。相反,你需要将变量$ok与进行比较false

经过这样的调整,它看起来会是这样的:

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

我相信你也会遇到错误cdp=$[$cdp + $dcpd],在 bash 中,加法通常如下所示:

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

提示:由于您陷入的循环的条件是ok=false,很明显问题在于条件没有按预期发生变化。这是那些容易被忽视的问题之一,尽管事后会让人感到尴尬。每当我遇到这些问题时,我都会出去散步或做些别的事情来分散注意力。通常情况下,当我回来时,问题就很明显了。

相关内容