Сценарий оболочки, который просит пользователя продолжить с да / нет - PullRequest
2 голосов
/ 05 марта 2010

У меня есть сценарий оболочки, который я хочу спросить у пользователя, хотят ли они продолжить. Если они наберут «n» и нажмут ввод, скрипт выйдет.

Если они нажмут 'y' и введут его, он продолжит работу. У меня есть это наверху моего сценария, но оно продолжается независимо от того, что я печатаю.

Что я делаю не так?

goon=
while [ -z $goon ]
do
    echo -n 'Do you want to continue? '
    read goon
    if [[ $goon = 'n' ]]
    then
        break
    fi
    goon=
done

Ответы [ 8 ]

5 голосов
/ 06 марта 2010

Используйте бесконечный цикл и регистр / esac следующим образом:

while true
do
    read -r -p 'Do you want to continue? ' choice
    case "$choice" in
      n|N) break;;
      y|Y) echo 'Do your stuff here';;
      *) echo 'Response not valid';;
    esac
done
4 голосов
/ 05 марта 2010

Оператор 'break' выведет вас из цикла while.

Если вы хотите выйти из скрипта, вы должны использовать 'exit'.

2 голосов
/ 05 марта 2010

Это прекрасно работает для меня, если я избавлюсь от двойных квадратных скобок:

if [ $goon = 'n' ]
1 голос
/ 05 марта 2010

Вместо echo + read, просто используйте read -p

read -p  "Do you want to continue? " goon 
0 голосов
/ 11 января 2014

Попробуйте приведенный ниже скрипт

#!/bin/bash
pause ()
{
 REPLY=X
 while [ "$REPLY" == "X" ] || [ "$REPLY" != "n" ]
 do
 echo -e "\t\tPress 'n' to continue\t\t\tPress 'x' to quit"
 read -n1 -s
     case "$REPLY" in
     "x")  exit                      ;;
     "X")  echo "case sensitive!!"   ;; 
     "n")  clear                     ;;
     "N")  echo "case sensitive!!"   ;;
      * )  echo "Invalid Option"     ;;
 esac
 done
 }
 pause
 echo "Hi"

Я уверен, что этот скрипт даст вам только два варианта перемещения ...

0 голосов
/ 05 марта 2010

Я думаю, что вы имеете в виду «выход» вместо «прерывание», если вы хотите, чтобы завершился весь сценарий.

Кроме того, вы на самом деле не проверяете «у», поэтому он зацикливается навсегда, даже еслиони говорят "у".

if [[ $goon = 'n' ]]
then
    exit
fi
if [[ $goon = 'y' ]]
then
    break
fi
0 голосов
/ 05 марта 2010

Я менее чем позитивен, но похоже, что ваше утверждение if всегда будет оцениваться как ложное. Вот ресурс по BASH-кодированию, который объясняет, как использовать условия так, как вы пытаетесь. http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-6.html#ss6.4

0 голосов
/ 05 марта 2010

Вот рабочий пример (== вместо = для проверки на равенство)

goon=
while [ -z $goon ]
do
    echo -n 'Do you want to continue? '
    read goon
    if [[ $goon == 'n' ]]
    then
        break
    fi
    goon=
done

Странная вещь, оригинал работает хорошо для меня тоже ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...