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

Я изучаю 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 - это строка из всех цифр
  • Что происходит с фоновыми заданиями после выхода из оболочки?
  • Стандартное решение для отображения сообщений на оболочке или с помощью оконных менеджеров gui
  • Почему команда ls медленно прерывает работу в каталоге NFS с большим количеством файлов?
  • Выполнение команды с несколькими входами для многих файлов
  • Извлечение файлов в текущий каталог
  • Различные оболочки для интерактивной и неинтерактивной работы
  • Перенесите stderr и stdout в / dev / null с помощью / bin / sh
  • путают о двойном цитировании
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.