Как мне запросить Да / Нет / Отменить ввод в сценарии оболочки Linux?

Другой способ сделать это - использовать функцию «Копировать базу данных»:

Найти, щелкнув правой кнопкой мыши исходную базу данных> «Задачи»> «Копировать базу данных».

Вы можете скопировать базу данных в более низкую версию экземпляра SQL Server. Это работало для меня с SQL Server 2008 R2 (SP1) - 10.50.2789.0 до Microsoft SQL Server 2008 (SP2) - 10.0.3798.0

1296
задан Brandon Rhodes 15 November 2016 в 02:46
поделиться

6 ответов

Самый простой и наиболее широко доступный метод для получения ввода данных пользователем при приглашении оболочки read команда. Лучшим способом проиллюстрировать его использование является простая демонстрация:

while true; do
    read -p "Do you wish to install this program?" yn
    case $yn in
        [Yy]* ) make install; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no.";;
    esac
done

Другой метод, на который указывает Steven Huwig, является Bash select команда. Вот тот же пример с помощью select:

echo "Do you wish to install this program?"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) make install; break;;
        No ) exit;;
    esac
done

С select Вы не должны санировать вход – это отображает доступный выбор, и Вы вводите число, соответствующее Вашему выбору. Это также циклично выполняется автоматически, таким образом, нет никакой потребности в while true цикл, чтобы повторить, если они дают недопустимый вход.

кроме того, проверьте превосходный ответ F. Hauri.

1450
ответ дан Spooky 15 November 2016 в 02:46
поделиться

Bash имеет выбор с этой целью.

select result in Yes No Cancel
do
    echo $result
done
103
ответ дан Steven Huwig 15 November 2016 в 02:46
поделиться
echo "Please enter some input: "
read input_variable
echo "You entered: $input_variable"
342
ответ дан Pistos 15 November 2016 в 02:46
поделиться
inquire ()  {
  echo  -n "$1 [y/n]? "
  read answer
  finish="-1"
  while [ "$finish" = '-1' ]
  do
    finish="1"
    if [ "$answer" = '' ];
    then
      answer=""
    else
      case $answer in
        y | Y | yes | YES ) answer="y";;
        n | N | no | NO ) answer="n";;
        *) finish="-1";
           echo -n 'Invalid response -- please reenter:';
           read answer;;
       esac
    fi
  done
}

... other stuff

inquire "Install now?"

...
29
ответ дан Benjamin W. 15 November 2016 в 02:46
поделиться

Я предлагаю Вас диалоговое окно использования ...

Ученик Linux: Улучшите Сценарии оболочки Bash Используя Диалоговое окно

, диалоговая команда включает использование окна, окружает сценарии оболочки для создания их использования более интерактивным.

это просто и легко для использования, существует также версия гнома, названная gdialog, который берет те же самые параметры, но показывает ему стиль GUI на X.

3
ответ дан brasofilo 15 November 2016 в 02:46
поделиться

Возможно обработать осведомленное о локали "Да / Никакой выбор" в оболочке POSIX; при помощи записей LC_MESSAGES категория локали, ведьма обеспечивает готовые шаблоны RegEx для соответствия входу и строкам для локализованного Да №

#!/usr/bin/env sh

# Getting LC_MESSAGES values into variales
IFS='
' set -- $(locale LC_MESSAGES)

yesexpr="$1"
noexpr="$2"
yesstr="$3"
nostr="$4"
messages_codeset="$5" # unused here, but kept as documentation

# Display Yes / No ? prompt into locale
echo "$yesstr / $nostr ?"

# Read answer
read -r yn

# Test answer
case "$yn" in
# match only work with the character class from the expression
  ${yesexpr##^}) echo "answer $yesstr" ;;
  ${noexpr##^}) echo "answer $nostr" ;;
esac
1
ответ дан Léa Gris 14 September 2019 в 16:30
поделиться
  • 1
    @dotty: А-ч, да, parseInt преобразует число в строку, затем преобразует ту строку назад в число, игнорируя что-либо после десятичного числа.:-), Но никакая потребность в нем в этом случае, можно вызвать функции на числах (они автоволшебно преобразовываются из примитивов в Number экземпляры). – T.J. Crowder 23 November 2010 в 12:43
Другие вопросы по тегам:

Похожие вопросы: