Вложенный цикл while в скрипте bash - внутренний пропускается - PullRequest
0 голосов
/ 13 марта 2019

Я попытался прочитать об этом, но не смог найти ничего, что решило бы мою проблему. Проблема: у меня есть вложенный цикл while, и внутренняя часть полностью пропускается.Внешний цикл работает нормально, а внутренний код работает как положено, когда вынимается и запускается сам по себе.Я новичок в этом, поэтому просто ищу прямой способ исправить, не обязательно способ переписать все (если не нужно), ха-ха.Я пропустил несколько вещей, заменив их родовым [команда] и т. Д.

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

Я очень ценю любую помощь!

1 Ответ

1 голос
/ 13 марта 2019

Ваш отступник вводит в заблуждение:

Проверьте код с правильными отступами

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
...