Первый всего, вы хотите, чтобы сценарий к read the values from the standard input, но вы восстанавливаете его из аргументов.
Второй, вы не передаете параметры функции.
В-третьих,, вы не используете параметры внутри функций.
Четвертого, вы не давая пространства между операторами при использовании выража.
ПРИМЕЧАНИЕ: Rany Albeg Wein отметил, что этот bash guide устарел, и он рекомендует this one. Также я рекомендую GNU official guide (other formats).
Таким образом, при условии, что вы хотите использовать ваш сценарий как ./my-script.sh m 2 3
, вот ваш код, но работает:
#!/bin/bash
add() {
expr $1 + $2
}
sub() {
expr $1 - $2
}
mult() {
expr $1 \* $2
}
div() {
expr $1/$2
}
echo "Enter a for add, s for subtract, m for multiply or d for divide and 2 numbers"
x=$2
y=$3
if [ $1 == "a" ]
then
add $x $y
else
if [ $1 == "s" ]
then
sub $x $y
else
if [ $1 == "m" ]
then
mult $x $y
else
if [ $1 == "d" ]
then
div $x $y
fi
fi
fi
fi
И, наконец, это ваш сценарий минимально модифицирован для read the data from the standard input:
#!/bin/bash
add() {
echo "Result:"
expr $1 + $2
}
sub() {
echo "Result:"
expr $1 - $2
}
mult() {
echo "Result:"
expr $1 \* $2
}
div() {
echo "Result:"
expr $1/$2
}
echo "Enter a for add, s for subtract, m for multiply or d for divide and 2 numbers"
read operation
echo "Read first parameter"
read x
echo "Read second parameter"
read y
if [ $operation == "a" ]
then
add $x $y
else
if [ $operation == "s" ]
then
sub $x $y
else
if [ $operation == "m" ]
then
mult $x $y
else
if [ $operation == "d" ]
then
div $x $y
fi
fi
fi
fi
Кроме того, если у вас возникли проблемы, вы можете добавить отладочные сообщения в сценарий, установив #!/bin/bash -xv
в начале скрипта.
«нет никакой возможности для ввода». Неясно, что вы имеете в виду, вы понимаете, что ваш скрипт можно назвать «myscript a 3 4»? Это ваш ввод, иначе вам нужно добавить 'read x?". Введите x значение «' и т. Д. Где-нибудь в вашем скрипте. Кроме того, 'elif' будет лучше для ваших вторых тестов. Еще лучше использовать 'case $ op в a) add ... ;; ....; esac' и т. д. Лучше уточнить свой текст Q, чем отвечать на комментарии. Удачи. – shellter
Спасибо. Я изменил из 2 методов добавления ввода на полпути и все запутался. – Bradg89