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

问题描述 投票:0回答:1

我试着阅读这个,但我找不到任何解决我的问题。问题是:我有一个嵌套的while循环,内部被完全跳过。 outter循环运行良好,内部代码在取出并自行运行时按预期工作。我是新手,所以只是寻找一种直接的修复方法,不一定是重写所有内容的方法(除非必要)哈哈。我省略了一些用泛型[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

我非常感谢任何帮助!

bash shell nested-loops
1个回答
1
投票

你的缩进是误导性的:

使用适当的缩进检查您的代码

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在你的第一个else声明的if分支内

我想,你的意思是什么

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
© www.soinside.com 2019 - 2024. All rights reserved.