У меня есть сценарий, и я хочу запросить у пользователя некоторую информацию, сценарий не может продолжаться, пока пользователь не введет эту информацию. Ниже приведена моя попытка поместить команду в цикл для достижения этой цели, но по какой-то причине она не работает.
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"; sleep 2; done
- все, что вам нужно сделать, это нажать Ctr-C сразу после (в течение двух секунд) выполненияecho
своей работы.until passwd || (( count++ >= 5 )); do echo "foo"; done
(только bash, убедитесь, что для счетчика установлено значение 0, если эта переменная существует). Если вам нужно это для простого sh, увеличьте счетчик в теле и используйте []$?
Вместо этого вам нужно проверить , что является статусом выхода предыдущей команды.passwd
выходит с 0, если все работало нормально, и с ненулевым, если изменение пароля не удалось (неправильный пароль, несоответствие пароля и т. д.)С вашей кавычкой версии, вы сравниваете вывод PASSWD, которая бы такие вещи , как
Enter password
иconfirm password
и тому подобное.источник
$?
?passwd
на,/bin/false
если у вас есть длинная и сложная команда, для которой вы не хотите сохранять две версии.Чтобы уточнить ответ @Marc B,
Это хороший способ сделать то же самое, что не зависит от конкретной команды.
источник
sudo
перед командой, вы можете простоsudo !!
выполнить предыдущую команду с привилегиями root.Вы можете использовать бесконечный цикл для достижения этой цели:
источник
&& break
после моей команды проверки, хотя вместо выбора случая.Если кто-то хочет ограничить количество попыток:
источник
until $(command)
в принципе всегда неправильно. Используйтеuntil command
вместо этого.$(...)
Вызывает выход изcommand
быть сам по себе работать в качестве команды, а статус выхода этой вторичной команды , чтобы быть тем, что петля решает бежать или не дальше; это только если не будет не стандартный вывод о том , что статус выхода из самой команды считается , когда замена команды присутствует.$command
также не является хорошим заполнителем - см. BashFAQ # 50 о том, почему использование строк для хранения команд изначально ненадежно. Тем не менее, это лучше, чем было; пониженный голос отозван.источник