Я пытаюсь использовать структуру «case» для предоставления вариантов и «if» для фактического выполнения действий. Я очень новичок в написании сценариев, поэтому, пожалуйста, простите меня за отсутствие знаний. Для упрощения я пропущу любые комментарии в коде и буду использовать только 1 (один) из вариантов для этого скрипта.

#!/bin/sh
echo " 01. Select a new hostname"
read -p "Make your selection: " varSelection
 case $varSelection in
  1)
    read -p "$(echo -e 'Enter hostname here: \n')" varHostName
    read -p "¿Are u sure u want to use \" $varHostname \"? (y/n)"varHostNameRight
    if [ $varHostNameRight == y ]; then
        sed -i "s/^\(HOSTNAME\s*=\s*\).*\$/\1$varHostName/" /etc/sysconfig/network
        hostname $varHostName
    else
        if [ $varHostNameRight == n ]; then
    fi
    ;;
 esac

В этом примере я бы хотел добиться, чтобы если пользователь выбирал «y» в строке «04», после выполнения строк 6 и 7 он возвращается в меню «case» (на самом деле, в случае чем 1)) Я не знаю, как это сделать: S после того, как каждый параметр применяется в моем сценарии, я должен повторно запустить его, чтобы выбрать другой вариант.

Кроме того, если пользователь выбирает «нет» в строке «04», я хотел бы «зациклиться» на строке «03» ... но опять же, я не знаю, как это сделать :(

Любая помощь приветствуется!

С уважением,

Себас

0
pup_seba 18 Мар 2014 в 01:56
4
Пожалуйста, не вставляйте номера строк в свой код. Если вам нужно сослаться на конкретную строку, добавьте комментарий. И не забудьте отформатировать код как код (выделите его и щелкните значок {}).
 – 
Keith Thompson
18 Мар 2014 в 01:59
Спасибо, что исправили! Извините: S
 – 
pup_seba
18 Мар 2014 в 02:18
Итак, одна очевидная проблема заключается в том, что вы на самом деле не написали никаких возможных совпадений для вашего оператора case. См. здесь хороший пример case использование.
 – 
dg99
18 Мар 2014 в 02:38
Привет, dg99! Спасибо за комментарий! Я, должно быть, пропустил это копирование. Код работает, как ожидалось, до тех пор, пока не появится сообщение «if [$ varHostNameRight == n]; then», поскольку я не знаю, как указать скрипту «перейти» обратно к строке, где он сначала запрашивает «Введите имя хоста здесь».
 – 
pup_seba
18 Мар 2014 в 02:52

1 ответ

Лучший ответ

Используйте цикл while:

while read -p "Make your selection: " varSelection; do
...
done

И break соответственно.

0
William Pursell 18 Мар 2014 в 02:54