Read-Host в цикле while с оператором if - PullRequest
0 голосов
/ 19 ноября 2018

Это должно быть очень просто, но я не могу заставить его работать.Я новичок в PowerShell, поэтому моя ошибка, вероятно, очевидна.Я пытаюсь попросить пользователя ввести данные с помощью цикла while и предложить пользователю повторить попытку, если введенное значение не было числовым.В bash это выглядело бы так:

while read -p "What is the first number? " first; do
if [[ $first = *[[:digit:]]* ]]; then
break   # if $first is numeric, break loop
else
echo "$first is not numeric. Enter a numeric value. "
fi
done

Вот что у меня есть для PS:

While ($first = (Read-Host "What is the first number?") -as [double]) {
if ($first -eq $null) { Write-Host "Please enter a numeric value." }
else { break }
}

В приведенном выше примере я могу нормально разорвать цикл при вводе числа, но я не вижу оператора Write-Host, если набираю строку.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы можете использовать это, чтобы постоянно запрашивать ввод действительного числа, как вы ищете.

Do {
    "Please enter a numeric value." | Out-Host
    $first = (Read-Host "What is the first number?") -as [double]
} While($null -eq $first)
0 голосов
/ 19 ноября 2018

Глядя на строку While:

While ($first = (Read-Host "What is the first number?") -as [double]) 

Это будет вводить / продолжать тело цикла только тогда, когда входное значение уже удвоено, поскольку оно сворачивает приведение к double как частьусловие цикла.Вы хотите ввести тело цикла на любом входе и только потом проверять, является ли оно двойным.По крайней мере, это то, что делает код bash:

While ($first = (Read-Host "What is the first number?")) {
    if ( ($first -as [double]) -eq $null) { Write-Host "Please enter a numeric value." }
    else { break }
}

Или вы можете продолжить использовать приведение как часть условия, отрицая все выражение, и, таким образом, избежать необходимости в неудобном break:

While (-not ($first = (Read-Host "What is the first number?") -as [double])) {
    Write-Host "Please enter a numeric value." 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...