Необходимо проверить переменную после команды переключения - PullRequest
0 голосов
/ 08 мая 2019

Мне нужен способ проверить, что был правильный выбор и правильно выбран годовой уровень.

Я попытался проверить с помощью цикла do / till.

do{

Function

if($Selection -gt 13)
{write-host "Incorrect year level selection, try again!"
}
    }until ($selection -lt 14)

Это не сработало.

Эта функция работает в настоящее время, если введен правильный ответ.

function Year_Level
{
    $Selection=Read-Host "
    Options
    0 = Reception
    1 = Year 1
    2 = Year 2
    3 = Year 3
    4 = Year 4
    5 = Year 5
    6 = Year 6
    7 = Year 7
    8 = Year 8
    9 = Year 9
    10 = Year 10
    11 = Year 11
    12 = Year 12
    13 = Staff
    Choose a Year Level...."
        Switch ($Selection)
            {
            "R" {$YearLevel1="Year 00"}
            "1" {$YearLevel1="Year 01"}
            "2" {$YearLevel1="Year 02"}
            "3" {$YearLevel1="Year 03"}
            "4" {$YearLevel1="Year 04"}
            "5" {$YearLevel1="Year 05"}
            "6" {$YearLevel1="Year 06"}
            "7" {$YearLevel1="Year 07"}
            "8" {$YearLevel1="Year 08"}
            "9" {$YearLevel1="Year 09"}
            "10" {$YearLevel1="Year 10"}
            "11" {$YearLevel1="Year 11"}
            "12" {$YearLevel1="Year 12"}
            "13" {$YearLevel1="Staff"}
            }
                {
                Return $yearLevel1
                }
}

$year_level = Year_Level

Write-Warning "Year level is $year_level" -Verbose

Я бы хотел, чтобы функция повторяла себя, пока не получит действительный ответ от пользователя, поэтому, выводя действительный $ yearLevel1

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Один из способов добиться этого при сохранении структуры кода - использовать рекурсию и регистр по умолчанию для оператора switch.

function Year_Level
{
    $Selection=Read-Host "
    Options
    0 = Reception
    1 = Year 1
    2 = Year 2
    3 = Year 3
    4 = Year 4
    5 = Year 5
    6 = Year 6
    7 = Year 7
    8 = Year 8
    9 = Year 9
    10 = Year 10
    11 = Year 11
    12 = Year 12
    13 = Staff
    Choose a Year Level...."
        Switch ($Selection)
            {
            "R" {$YearLevel1="Year 00"}
            "1" {$YearLevel1="Year 01"}
            "2" {$YearLevel1="Year 02"}
            "3" {$YearLevel1="Year 03"}
            "4" {$YearLevel1="Year 04"}
            "5" {$YearLevel1="Year 05"}
            "6" {$YearLevel1="Year 06"}
            "7" {$YearLevel1="Year 07"}
            "8" {$YearLevel1="Year 08"}
            "9" {$YearLevel1="Year 09"}
            "10" {$YearLevel1="Year 10"}
            "11" {$YearLevel1="Year 11"}
            "12" {$YearLevel1="Year 12"}
            "13" {$YearLevel1="Staff"}
            Default { Year_Level }
            }

         Return $yearLevel1
}

$year_level = Year_Level

Write-Warning "Year level is $year_level" -Verbose

Когда один из вариантов не выбран, функция будет продолжать вызывать себя, пока не будет введен кодированный регистр. Например, если пользователь вводит 16, регистр по умолчанию сработает и снова вызовет функцию. Это будет повторяться до тех пор, пока не будет запущен один из других случаев. Тем не менее, ваш список опций и регистр не совсем совпадают (см. Случай получения).

0 голосов
/ 08 мая 2019

Пример, я написал на основе вашего вопроса .. надеюсь, это поможет

$a = (1,2) ## these are the only valid responses you can allow

while(1){ ## start loop

    $selection =  Read-Host "Choose your selection"
    $response = switch($selection){

    "1" {"write-host 1 is valid" }

    "2" {"write-host 2 is valid" }
    "default" { "Not a valid reponse" }
    }

    if($a -contains $selection)  { ## if response is valid
    break

    }else{ ## loop for eternity

    Write-Host "Your selection is invalid, you have selected $selection,Please try again"
    }

    }

    Write-Host "Reponse is $response"

Я также добавил несколько комментариев

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...