Я пишу скрипт для создания повторяющейся задачи, которая изменяет только основные значения и местоположения, такие как имя пользователя.Подтверждение ввода сценария оболочки
Я написал код, который запрашивает имя пользователя и проверяет, что он еще не используется. Теперь я пытаюсь запросить пользователя, правильно ли введен полученный скрипт и если он не изменит его. Моя проблема в том, что если вход правильный, он продолжает цикл. У кого-нибудь есть предложения?
clear
confirm() {
# call with a prompt string or use a default
echo "CMIT # ${1}"
read -r -p "CMIT [Y/n/q] > " answer
case "${answer}" in
[yY]|[yY][eE][sS]) false ;;
[nN]|[nN][oO]) true ;;
[qQ]|[qQ][uU][iI][tT]) exit 1 ;;
esac
}
while true; do
OE_USER=
while (id -u $OE_USER > /dev/null 2>&1); do
echo "CMIT # What user will this run under?"
read -r -p "CMIT > " OE_USER
if id -u $OE_USER > /dev/null 2>&1; then
echo "CMIT # Bad User Name. Try Again"
fi
done
clear
confirm "Continue installing using '$OE_USER' as the server name?"
done
Ваш внешний цикл while никогда не сломается. В цикле нет инструкции break, а условный цикл - просто «истина». Я думаю, вам может понадобиться условие, чтобы проверить результат вызова 'confirm'? Затем вы можете изменить 'истину' на' $? ', Но просто убедитесь, что' $? 'Равно true, входя в цикл, поэтому добавьте вызов' true' непосредственно перед внешним циклом while. – bgoldst
@bgoldst Спасибо. Я заметил, что сразу после того, как я опубликовал это. все еще не могу поверить, что это было настолько очевидно. –