2013-03-13 5 views
2

творю новое меню Driven Shell Script в Linux, я упростил свою таблицу просто привет и до свидания, чтобы сделать это проще, ниже мой основной макет менюShell Script для меню

# Menu Shell Script 
# 
echo ---------------- 
echo  menu 
echo ---------------- 
echo [1] hello 
echo [2] bye 
echo [3] exit 
echo ---------------- 

В принципе у меня есть меню, я играл вокруг с несколькими вещами в последнее время, но, кажется, не могу получить что-то работает, как я новичок в этом, я думаю, то следующая строка будет

`read -p "Please Select A Number: " menu_choice` 

, но я не уверен, что делать с переменная, а что нет. Мне было интересно, может ли кто-нибудь помочь мне со следующим битом кода, просто чтобы он сказал привет, когда я нажимаю один, пока 2 нажата и выйдет, когда 3, когда пользователь нажмет 3. Это было бы так высоко оценено, как я несколько дней пытались по-разному и не могли заставить его работать.

+0

Вы не должны помещать команду 'read' в обратные ссылки. Просто используйте его нормально, а затем проверьте переменную '$ menu_choice' на инструкцию' case'. – Barmar

+0

У вас есть эти обратные шаги в вашем коде, или это было что-то, что вы добавили, чтобы отформатировать свой код для этого сообщения? – Mat

+1

По какой причине вы не используете встроенную команду 'select' для отображения меню? – Barmar

ответ

2

вам не нужны эти кавычку для echo... и read

echo "----------------" 
echo " menu" 
echo "----------------" 
echo "[1] hello" 
echo "[2] bye" 
echo "[3] exit" 
echo "----------------" 

read -p "Please Select A Number: " mc 
if [[ "$mc" == "1" ]]; then 
    echo "hello" 
elif [[ "$mc" == "2" ]]; then 
    echo "bye" 
else 
    echo "exit" 
fi 

Редактировать

showMenu(){ 

echo "----------------" 
echo " menu" 
echo "----------------" 
echo "[1] hello" 
echo "[2] bye" 
echo "[3] exit" 
echo "----------------" 

read -p "Please Select A Number: " mc 
return $mc 
} 


while [[ "$m" != "3" ]] 
do 
    if [[ "$m" == "1" ]]; then 
     echo "hello" 

    elif [[ "$m" == "2" ]]; then 
     echo "bye" 
    fi 
    showMenu 
    m=$? 
done 

exit 0; 
+0

Спасибо, что это сработало! Я правильно понял, что есть код, чтобы отправить это в цикл? поэтому, когда я нажимаю один, и он говорит привет, он просто не заканчивается? – user2157995

+0

@ user2157995 Я тебя не понял, извините, какой цикл? эхо «привет» в цикле? – Kent

+0

Весь мой код находится в файле, когда я открываю файл и нажимаю 1, он говорит привет, а затем оставляет файл и выбирает другой вариант. Мне нужно снова ввести ./file_name, чтобы начать заново. Есть ли код, поэтому, когда я нажимаю 1, он говорит привет, а затем возвращает меня в меню? – user2157995

0

Вот пример

if [ $menu_choice -eq 1 ] 
then 
    echo hello 
elif [ $menu_choice -eq 2 ] 
then 
    echo bye 
elif [ $menu_choice -eq 3 ] 
then 
    exit 0 
fi 

или с использованием случае

case $menu_choice in 
    1) echo hello 
     ;; 
    2) echo bye 
     ;; 
    3) exit 0 
     ;; 
esac 
+1

'eq' не является оператором сравнения в' test'. ITYM '-eq' или' = '. – Barmar

+0

@Barmar thanx. исправлено – uba