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

Я изучаю 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)) } 
  • Будет ли сценарий оболочки выполнен в Solaris? если нет, то это самый быстрый способ сделать его совместимым
  • inotifywait для перемещения файла после загрузки пользователем
  • Как выполнить время параллельных команд
  • идентифицировать файлы с не-ASCII или непечатаемыми символами в имени файла
  • Напишите в FIFO только в том случае, если он существует
  • Передавать параметры командной строки программе внутри сценария оболочки
  • Разместить файл доступа ht в webroot каждого скрипта bash каталога
  • log remote X session из ssh (PuTTY)
  • Динамически читать имя функции bash изнутри функции bash
  • find -exec exit 1 \; Не работает и не находит -exec sh -c exit 1 \;
  • bash добавляет дополнительные одинарные кавычки
  • Interesting Posts

    Автоматическая печать изображений с добавленными надписями

    Как скопировать файлы с удаленного сервера unix в локальные окна?

    Являются ли файлы устройств реализованы драйверами устройств или ядрами ОС?

    Каков безопасный формат жесткого диска для архивирования данных в хранилище данных?

    Могу ли я перенаправить весь трафик на порт на совершенно другой IP-адрес?

    Как ввести n повторений цифры в bash, в интерактивном режиме

    Как активировать GPU AMD вручную?

    Как я могу заставить свой Wi-Fi подключиться к каналу G-диапазона?

    Ведение журнала создания скрытых файлов

    Установка Rubymine без sun-java6-jre

    Что такое плоский файл?

    Pidgin заменяет мои символические ссылки

    Как я могу перенастроить свое ядро ​​2.6.37.6 для Ubuntu для сжатия до 950 КБ или меньше?

    Перечислите права доступа только к текущему каталогу

    Почему оболочка Command Substitution сжимает конечный символ новой строки?

    Linux и Unix - лучшая ОС в мире.