Eu tenho um script e quero solicitar ao usuário algumas informações, o script não pode continuar até que o usuário preencha essas informações. A seguir, é minha tentativa de colocar um comando em um loop para conseguir isso, mas não funciona por algum motivo.
echo "Please change password"
while passwd
do
echo "Try again"
done
Eu tentei muitas variações do loop while:
while `passwd`
while [[ "`passwd`" -gt 0 ]]
while [ `passwd` -ne 0 ]]
# ... And much more
Mas não consigo fazê-lo funcionar.
until passwd; do echo "Try again"; sleep 2; done
- tudo o que você precisa fazer é pressionar Ctr-C logo após (dentro de dois segundos) oecho
trabalho realizado.until passwd || (( count++ >= 5 )); do echo "foo"; done
(somente bash, certifique-se de definir a contagem como 0, se existir essa variável) Se você precisar disso para sh simples, aumente o contador no corpo e use []Você precisa testar
$?
, que é o status de saída do comando anterior.passwd
sai com 0 se tudo funcionou bem e diferente de zero se a alteração da senha falhar (senha incorreta, incompatibilidade de senha, etc ...)Com sua versão de backtick, você está comparando a saída do passwd, que seria algo do tipo
Enter password
e assim porconfirm password
diante.fonte
$?
?passwd
com/bin/false
se você tiver algum comando longo e complicado do qual não deseja manter duas versões.Para elaborar a resposta de @Marc B,
É uma boa maneira de fazer a mesma coisa que não é específica de comando.
fonte
sudo
na frente de um comando, bastasudo !!
executar o comando anterior com privilégios de root.Você pode usar um loop infinito para conseguir isso:
fonte
&& break
depois do meu comando de verificação, em vez do caso de seleção.Se alguém que deseja ter um limite de novas tentativas:
fonte
until $(command)
é basicamente sempre errado. Use emuntil command
vez disso. O$(...)
faz com que a saída decommand
ser ele mesmo executado como um comando e o estado de saída do que de comando secundário para ser o que o loop decide correr ou não diante; é apenas se há é não stdout que o status de saída do comando em si é considerado quando a substituição de comando está presente.$command
também não é um ótimo espaço reservado - consulte o BashFAQ # 50 sobre por que o uso de strings para armazenar comandos não é confiável. Ainda assim, isso é melhor do que era; voto negativo retraído.fonte