В приведенном ниже сценарии, который предлагает пользователю подтвердить, что он хочет продолжить выполнение потенциально плохого сценария, - когда пользователь входит Y
в запрос - он выйдет из case
блока, только для while
повторной отправки в цикл.
#! /bin/bash
set -e
echo
echo "bad install start"
echo "-----------------------------------------"
while true; do
read -p "this script will probably fail - do you want to run anyway?" yn
case $yn in
[Yy]*)
##### WHAT GOES HERE?? #####
;;
[Nn]*)
exit ;;
*)
echo "answer y or n" ;;
esac
echo "script has broken out of case back into while loop"
done
echo -e "\e[33m Installing bad packagename \e[0m"
apt-get install sdfsdfdfsd
echo "rest of script - will i keep running?"
Когда n
введено, сценарий существует полностью, как требуется. Я хотел бы знать, как сделать так, чтобы при Y
вводе скрипт разрывался как с блоком while, так case
и с блоком while, но не завершался полностью. Есть ли что-то, что я могу вставить для заполнителя («Что здесь происходит?»), Чтобы сделать это?
bash
shell-script
the_velour_fog
источник
источник
[Yn]*)
; ты наверное имел ввиду[Yy]*)
.$TEST=1
должно бытьTEST=1
, и ваш сценарий, скорее всего, будет работать с этим изменением.Ответы:
В случае, когда пользователь ввел «y», вы можете выйти как while, так и case:
В твоем случае ты хочешь сделать
break 2
.источник
break 2
сделал это, относительно вашего комментария выше, да, я попытался установить переменную, но это не сработало - я предполагаю, что bash имеет локальную область видимости в пределах while и case блоков? в отличие, например, от PHPcase
виде, что и вы, должно быть отражено в тесте цикла while.[Yy]
блока дела. Я немного отредактировал внутри моего вопроса, чтобы отразить, но ваше право, это работает - спасибо, я выучил пару классных вещей!break
достаточно. Я не вижу двух уровней циклов в коде.У @dhag отличный ответ. Вы также можете использовать:
источник