Я пытаюсь написать сценарий оболочки, в котором должен быть цикл try / except. Как мне сделать такой цикл в оболочке?
В основном я пытаюсь сделать следующее:
password = "user's password here"
Try_command_here:
echo $password | sudo -S apt-get -y purge some-package-here
Except_command_here:
Re-obtain_user_password
После повторного получения пароля он будет зацикливаться, чтобы можно было повторить попытку. При необходимости он сделает это 3 раза, и, если к тому времени не будет введен правильный пароль, отобразит окно с ошибкой и завершит работу.
Я знаю, что в Python команда для этого просто try:
, а затем except:
Это так для оболочки или что-то другое?
Спасибо!!
РЕДАКТИРОВАТЬ
Я нацелен на оболочку bash.
Вывод echo $SHELL
===> /bin/bash
Чтобы узнать, завершилась ли команда / программа неудачной или успешной, вы можете использовать ее статус выхода.
@Inian, я добавил запрошенную вами информацию.
Кстати, echo $password
глючит. Всегда используйте кавычки: echo "$password"
- иначе, если в пароле будет *
, окруженный пробелами, он будет заменен списком имён файлов; также возможны различные другие нежелательные замены (несколько пробелов свернуты до одного, конечные пробелы удалены, выражения скобок проанализированы как глобусы и т. д.). Это тоже BashPitfalls # 14.
Я не думал об этом. Спасибо, @CharlesDuffy!
@Inian, кстати, повторяющийся вопрос или нет, я подумал, что ваш ответ был здесь полезен, поскольку он адаптирован к тому, что делает OP, и, таким образом, дает конкретное руководство о том, как лучше всего применить обобщенный ответ, указанный в связанном дубликате. Если вы не хотите, чтобы репутация отвечала на обман, я бы подумал о том, чтобы пометить его как вики-сообщество, а не удалять, но там достаточно добавленной стоимости, и мое личное суждение состоит в том, что я не считаю это обязательно требуется в данных обстоятельствах.
... разрешено, возражение @ user464502 имеет значение (и хотя бы один ответ в связанном вопросе явно охватывает случай повторного запроса пароля), но это выходит за рамки непосредственного фокуса вопроса (фактически, «как мы обнаруживаем и выполняем ответвления на сбои в логика оболочки? ") в поисках указаний по различению отказов sudo
от отказов apt-get
, что, возможно, могло бы / должно быть отдельным вопросом сам по себе.
На какую оболочку вы в частности нацеливаетесь? Можете показать, что кидает
echo $SHELL
?