Сценарий оболочки, использующий функцию (), не находящую команду

Я изучаю shell-скрипты, и я изучаю, как использовать функцию в скрипте оболочки. Сценарий предполагается запускать в качестве базового математического калькулятора с двумя определенными числами пользователем. Предполагается добавить, вычесть, умножить и разделить. Когда скрипт запускается, он не может получить доступ к функции для получения результатов. Он останавливается в строке: «1») result = add $ num1 $ num2 ;; и не может найти команду. Я не уверен, что мне не хватает в моем коде.

#!/bin/bash #function definition function add() { echo $(($num1 + $num2)) } function subtract() { echo $(($num1 - $num2)) } function multiply() { echo $(($num1 * $num2)) } function divide() { echo $(($num1 / $num2)) } #Main Script echo "Enter two numbers:" read num1 num2 echo "Enter 1 for additon, 2 subtraction, 3 multiplication, 4 divison:" read num3 case "$num3" in "1")result=add $num1 $num2 ;; "2")result=subtract $num1 $num2 ;; "3")result=multiply $num1 $num2 ;; "4")result=multiply $num1 $num2 ;; * ) echo "You didn't enter 1,2,3,4 for your function." ;; esac echo "The result is $result: " 

2 Solutions collect form web for “Сценарий оболочки, использующий функцию (), не находящую команду”

 result=add $num1 $num2 

Эта строка интерпретируется оболочкой как назначение (result = add), command ($ num1) и аргумент ($ num2). Это не то, что вы хотели. Чтобы получить вывод функции, вам нужна подстановка команды:

 result=$(add $num1 $num2) 

Ваши функции не используют значения, переданные им в командной строке, они используют глобальные переменные $num1 и $num2 .

Чтобы использовать переданные значения, перепишите их следующим образом:

 function add() { echo $(($1 + $2)) } 

или

 function add() { local num1="$1" local num2="$2" echo $(($num1 + $num2)) } 
  • Как эхо-строку с несколькими пробелами в bash «нетронутой»?
  • Монетный двор Linux: сделать «общедоступную интерактивную пусковую установку» только из корня sh?
  • Вывод строки в нижнем правом углу терминала
  • Передача переменной sed
  • Получить путь к текущему скрипту при выполнении через символическую ссылку
  • Какой метод использует оболочка входа для чтения / etc / profile?
  • Сценарий оболочки для поиска и подсчета общего количества символов во всех файлах
  • Как запустить команду без нажатия клавиши ввода?
  • Замена процесса bash временным файлом
  • Что означает «rm hashed»?
  • Есть ли причина, чтобы shebang указывал на / bin / sh, а не / bin / bash?
  • Linux и Unix - лучшая ОС в мире.