我正在学习 shell 脚本,并且正在研究如何在 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: "
答案1
result=add $num1 $num2
该行被 shell 解释为赋值 (result=add)、命令 ($num1) 和参数 ($num2)。那不是你想要的。要检索函数的输出,您需要命令替换:
result=$(add $num1 $num2)
答案2
您的函数不使用在命令行上传递给它们的值,它们使用全局变量$num1
和$num2
。
要使用传递的值,请像这样重写它们:
function add()
{
echo $(($1 + $2))
}
或者
function add()
{
local num1="$1"
local num2="$2"
echo $(($num1 + $num2))
}