bash 脚本中的嵌套 while 循环 - 内部被跳过

Nested while loop in bash script - inner being skipped

我试着阅读这篇文章,但找不到任何解决我问题的方法.. 问题是:我有一个嵌套的 while 循环,并且完全跳过了内部循环。外部循环 运行 很好,内部代码在取出时确实按预期工作 运行 。 我对此很陌生,所以只是在寻找一种直接的修复方法,而不一定是一种重写所有内容的方法(除非必要)哈哈。 我省略了一些用通用 [command] 替换的东西

guid=0
procedure=0
olcmd="${userbin}/[command] ${guid}"

guidver=true;
while $guidver; do
    guidver=false;
    read -p "
Input log GUID below and press 'Enter'?
"   guid
    if [[ $guid == ????????-????-????-????-???????????? ]]; then
        printf "Good GUID, continuing\n";
    else echo "Bad value, please use only Index GUIDs."; guidver=true
    olver=true;
    while $olver; do
        olver=false;
        if $olcmd | grep -i '[text]'>/dev/null; then
        printf "\n[text]\n\n"
            continue
#       guidver=false;
        else printf "\n[text]\n\n"
        olver=true;
        break
        fi
    done
    fi
done

非常感谢任何帮助!

您的缩进具有误导性:

检查代码是否缩进正确

guid=0
procedure=0
olcmd="${userbin}/[command] ${guid}"

guidver=true;
while $guidver; do
    guidver=false;
    read -p "
    Input log GUID below and press 'Enter'?
    "   guid
    if [[ $guid == ????????-????-????-????-???????????? ]]; then
        printf "Good GUID, continuing\n";
    else echo "Bad value, please use only Index GUIDs."; 
        guidver=true
        olver=true;
        while $olver; do
            olver=false;
            if $olcmd | grep -i '[text]'>/dev/null; then
                printf "\n[text]\n\n"
                    continue
                #       guidver=false;
            else printf "\n[text]\n\n"
                olver=true;
                break
            fi
        done
    fi
done

看到了吗?您的第二个 while 位于第一个 if 语句

else 分支内

我想,你的意思应该是

guid=0
procedure=0
olcmd="${userbin}/[command] ${guid}"

guidver=true;
while $guidver; do
    guidver=false;
    read -p "
    Input log GUID below and press 'Enter'?
    "   guid
    if [[ $guid == ????????-????-????-????-???????????? ]]; then
        printf "Good GUID, continuing\n";
    else echo "Bad value, please use only Index GUIDs."; 
        guidver=true
    fi

    olver=true;
    while $olver; do
        olver=false;
        if $olcmd | grep -i '[text]'>/dev/null; then
            printf "\n[text]\n\n"
                continue
            #       guidver=false;
        else printf "\n[text]\n\n"
            olver=true;
            break
        fi
    done
done