2013-05-06 2 views
1

как создать простой скрипт, который запрашивает простой ввод от пользователя, а затем запускает только команду, связанную с предопределенным выбором, напримеринтерактивного Shell Script

IF "ON" 
Backup Server 
ELSEIF "OFF" 
Delete Backups 
ELSEIF "GREY" 
Send Backups 
ENDIF 

ответ

7

Вы можете взять входные данные из пользователь через read, и вы можете использовать блок case ... esac, чтобы делать разные вещи.

Read принимает в качестве аргумента имя переменной, в которую он будет хранить его значение

read foo 

Примет в vaue от пользователя и хранить его в $foo.

Чтобы запросить пользователя для ввода, вам нужно будет использовать эхо.

echo "What is your favourite color?" 
read color 

Наконец, большинство сценариев оболочки поддерживают оператор case. Которые принимают форму

case "value" in 
    "CHOICE) 
     # Do stuff 
     ;; 
esac 

Собираем все вместе:

echo "Which choice would you like? \c" 
read choice 

case "$choice" in 

    ON) 
     # Do Stuff 
     ;; 
    OFF) 
     # Do different stuff 
     ;; 
    *) 
     echo "$choice is not a valid choice" 
     ;; 
esac 
+0

мне нужно, чтобы это \ c? И нужно ли где-то определять выбор? –

+0

Синтаксис '' \ c'' более старый для подавления новой строки из эха, вы можете просто использовать флаг '-n', если ваша система его поддерживает. Выбор для случая может быть литералами, регулярными выражениями или переменными (которые будут интерполированы). – zellio

+0

Есть ли способ показать варианты, которые есть для пользователя? –

1
#!/bin/bash 

select choice in "ON" "OFF" "*"; do 
case "$choice" in 
    ON) echo "$choice"; # do something; 
    break;; 
    OFF) echo "$choice"; # do something; 
    break;; 
    *) echo "$choice other"; # do something; 
    break;; 
esac 
done 
0

Привет есть простой пример того, как сделать это

while true; do 
    read -p 'do you want to continue "y" or "n": ' yn 

    case $yn in 

     [Yy]*) echo 'this program continue '; break;; 

     [Nn]*) exit;; 

     *) echo 'Please answer yes or no: ';; 

    esac 

done 

while true; do 
    read -p 'press "c" to quit this program: ' c 

    case $c in 

     [Cc]*) exit;; 

     *) echo 'for quit this program press "c": ' ;; 

    esac 

done 

для источника нажмите здесь source