Сценарии оболочки. Логическая ОШИБКА - PullRequest
1 голос
/ 16 октября 2010

Я написал сценарий оболочки с регистром переключения и использует опции 1-5 и выполняет операции с переменными соответственно.

Мой код работает нормально, хотя есть небольшое изменение, которое я хотел бы внести в мой код.

Когда код вводит аргумент регистра по умолчанию, после этого он по-прежнему запрашивает «Введите два числа», а затем печатает «Недопустимый параметр», что неуместно. В идеале код должен прекратиться после неверного параметра.

Я только что изучил сценарии оболочки, поэтому я не очень хорош в этом.

Я скопировал и вставил мой исходный код ниже:

#! /bin/bash

echo "1. Add
        2.Substract
    3.Divide
    4.Multiply
    5.Quit"

read -p "Enter an option:" option
read -p "Enter two numbes: " first second

case $option in

1)income=$[ first + second ];;
2)income=$[ first - second ];;
3)income=$[ first / second ];;
4)income=$[ first * second ];;
*)echo "Invalid Option";
    exit 1;;

esac

echo "Income=$income"

exit 0

Я пытался использовать if, иначе ... но это не служит цели. * Альтернативный подход: *

#! /bin/bash                                                                                                                                                                                                                                                                       

echo "1. Add
        2.Substract
    3.Divide
    4.Multiply
    5.Quit"

read -p "Enter an option:" option

if [ option > 5 ]
then 

    echo "Invalid Option"
        exit 1

else 

read -p "Enter two numbes: " first second

fi

case $option in

1)income=$[ first + second ];;
2)income=$[ first - second ];;
3)income=$[ first / second ];;
4)income=$[ first * second ];;
*)echo "Invalid Option";
    exit 1;;

esac

echo "Income=$income"

exit 0

Ответы [ 3 ]

1 голос
/ 16 октября 2010

Вы должны взглянуть на встроенную функцию select, это поможет значительно снизить сложность того, что вы хотите.Вы можете заменить эхо / кейс на него.

В этом случае, я думаю, ваша проблема в том, что ваши кейсы имеют вид 1.), а не 1).Ваш пользователь должен будет набрать число с периодом для совпадения первого.

Кроме того, вам нужно указать строку «шебанга» как #!/bin/bash, она не будет работать с пробелому вас есть.

0 голосов
/ 17 октября 2010

Вам не нужно использовать, если еще. Просто возьмите вход в корпусе переключателя.

#!/bin/bash

echo "
      1.Add
      2.Subtract
      3.Divide
      4.Multiply
      5.Quit"

read -p "Enter an option:" option

case $option in

1)
    read -p "Enter two numbers " first second
    income=$[ first + second ];;

2)
    read -p "Enter two numbers " first second
    income=$[ first - second ];;


3)
    read -p "Enter two numbers " first second
    income=$[ first / second ];;

4)
    read -p "Enter two functions " first second
    income=$[ first * second ];;

*)echo "Invalid Option";
    exit 1;;

esac

echo "Income = $income"

exit 0

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

#!/bin/bash

function GetInput()
{
    read -p "Enter two numbers : " first second
}



echo "
      1.Add
      2.Substract
      3.Divide
      4.Multiply
      5.Quit"

read -p "Enter an option:" option

case $option in

1)
    GetInput
    income=$[ first + second ];;

2)
    GetInput
    income=$[ first - second ];;


3)
    GetInput
    income=$[ first / second ];;

4)
    GetInput
    income=$[ first * second ];;

*)echo "Invalid Option";
    exit 1;;

esac

echo "Income = $income"

exit 0
0 голосов
/ 16 октября 2010

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

#! /bin/bash


while true
do
cat <<-EOF
  1. Add
  2.Substract
  3.Divide
  4.Multiply
  5.Quit
EOF
    read -p "Enter an option:" option
    read -p "Enter two numbes: " first second

    case $option in
    1) income=$((first + second ));;
    2) income=$(( first - second ));;
    3) income=$(( first / second ));;
    4) income=$(( first * second ));;
    5) exit;;
    *) echo "Invalid Option, try again";
    esac

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