Ответ 1
until passwd
do
echo "Try again"
done
У меня есть script и вы хотите спросить у пользователя некоторую информацию, script не может продолжаться до тех пор, пока пользователь не заполнит эту информацию. Ниже приведена моя попытка поместить команду в цикл для достижения этой цели, но по какой-то причине она не работает.
echo "Please change password"
while passwd
do
echo "Try again"
done
Я пробовал много вариантов цикла while:
while `passwd`
while [[ "`passwd`" -gt 0 ]]
while [ `passwd` -ne 0 ]]
# ... And much more
Но я не могу заставить его работать.
until passwd
do
echo "Try again"
done
Вместо этого вам нужно проверить $?
, что является статусом выхода предыдущей команды. passwd
завершает работу с 0, если все работает нормально, и отличное от нуля, если смена пароля была неудачной (неправильный пароль, несоответствие пароля и т.д.)
passwd
while [ $? -ne 0 ]; do
passwd
done
С вашей версией backtick вы сравниваете вывод passwd, который будет выглядеть как Enter password
и confirm password
и т.д.
Чтобы уточнить ответ @Marc B,
$ passwd
$ while [ $? -ne 0 ]; do !!; done
Хороший способ сделать то же самое, что не является специфичным для команды.
while [ -n $(passwd) ]; do
echo "Try again";
done;
вы можете использовать цикл бесконечности
while true
do
read -p "Enter password" passwd
case "$passwd" in
<some good condition> ) break;;
esac
done
Попробуйте функцию bash 'read'
echo -n "please confirm to continue (Y/n) "
read yn
case $yn in
do the rest ;)
esac