Verificação de uma linha lida [fechada]

0

Eu tenho essa operação read :

read -p "Please enter your name:" username

Como posso verificar o nome dos usuários em uma linha?

Se não for possível de maneira sã em uma linha, talvez uma função Bash colocada dentro de uma variável seja uma solução decente?

O nome é apenas um exemplo, pode ser uma senha ou qualquer outro valor de formulário comum.

Verificando os meios aqui: solicitando que o usuário insira o nome duas vezes e para garantir que os dois valores sejam os mesmos.

    
por user9303970 05.02.2018 / 03:29

2 respostas

5

Que o usuário digitou (ou, possivelmente, copiou e colou ...) a mesma coisa duas vezes é feito normalmente com duas read chamadas, duas variáveis e uma comparação.

read -p "Please enter foo" bar1
read -p "Please enter foo again" bar2
if [ "$bar1" != "$bar2" ]; then
   echo >&2 "foos did not match"
   exit 1
fi

Isso poderia ser feito com uma variável de ciclo e condição while que repete os prompts-e-verificações até que uma correspondência seja feita ou possivelmente resumida em uma chamada de função, se houver muitos prompts para entrada .

    
por 05.02.2018 / 03:46
3

Para expandir a resposta do thrig e incluir a função que você solicitou:

Função

enter_thing () {
    unset matched
    while [[ -z "$matched" ]]; do
        read -rp "Please enter $@: " thing1
        read -rp "Please re-enter $@: " thing2
        if [[ "$thing1" == "$thing2" ]]; then
            matched=1
        else
            echo "Error! Input does not match" >&2
        fi
    done
    echo "$thing2"
}

Em um script, você pode chamar assim:

username=$(enter_thing "name")
email=$(enter_thing "email")
password=$(enter_thing "password")
    
por 05.02.2018 / 04:01