Несколько операторов чтения. Не продолжайте, пока пользователь не введет - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть несколько прочитанных заявлений. Я пытаюсь выяснить, как запретить пользователю переходить к следующему утверждению, если они не предоставили пользовательский ввод. У меня проблемы с тем, чтобы обернуть голову вокруг этого. Я видел примеры для одного оператора read -p, но не могу найти подходящего решения для нескольких последующих операторов чтения.

     read -p " Write something: " var1
     read -p " Write something again: " var2
     read -p " write something a third time: " var3
 desired output
 Write something: #no input
 You have not entered anything. Please try again.
 Write something: computer
 Write something again

, затем действуйте соответствующим образом.

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

С bash:

while [[ "$var1" = "" ]]; do read -p " Write something: " var1; done
0 голосов
/ 25 февраля 2020

То же, что опубликовал Сайрус, но с предупреждением

until [[ "$var1" ]]; do
    read -p " Write something: " var1
    [[ "$var1" ]] || echo "You have not entered anything. Please try again."
done

И это создаст все переменные в одном l oop

vars=(var1 var2 var3)

for varname in ${vars[@]}; {
    until [[ "${!varname}" ]]; do
        read -p " Write something to $varname: " $varname
        [[ "${!varname}" ]] || echo "You have not entered anything. Please try again."
    done    
}

Мы можем go дальше и использовать массив для хранения данных

for i in {1..3}; {
    until [[ "${vars[$i]}" ]]; do
        read -p "Write something to var$i: " vars[$i]
        [[ "${vars[$i]}" ]] || echo "You have not entered anything. Please try again."
    done    
}
...