Intereting Posts
Найти, на какие файлы влияют плохие блоки на файловой системе ext4 SOLVED: Ошибка Useradd: useradd: невозможно заблокировать / etc / passwd; повторите попытку позже Хром: «Эта версия Chrome больше не поддерживается» – linux mint Проблема разрешения cp / mv и nfs Где настроить пароль для sudo Можно ли удалить «ssh: //» из URL-адресов git remote? Как получить UUID раздела и определить переменную Bash как равную ей? Пропуск среднего отображения с помощью cryptsetup luksOpen Попытка отправить несколько текстовых вложений через почтовое сообщение Два последовательных OP после конвейера или два JQ OP за один прогон? PostgreSQL Ubuntu 16.04 Прочтите файл с одного сервера Unix на другой сервер Unix Как Ubuntu сохраняет постоянные разрешения доступа для точек монтирования автоматически установленных пользователем устройств? Как установить redis 3.0.7 на Debian 8 как отправить CTRL-ALT-Fn в виртуальную коробку гостевой Linux?

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

Я изучаю 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: " 

 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)) }