我想将数字之和除以一个值

我想将数字之和除以一个值

这是我的 Unix shell 脚本代码

#! /bin/ksh

echo "Enter your first number:"    
read first

echo "Enter your second number:"    
read second

echo "Enter your third number:"    
read third

SUM=`expr $first + $second + $third`    
AVERAGE="$SUM/3"

echo "The average is $AVERAGE"

基本上我想找到用户输入的 3 个值的平均值。输入所有值后得到的结果,例如所有值加起来为 12;是“平均值是12/3”。

答案1

slm 在这里的回答没有考虑到您询问 Korn shell,而不是 Bourne Again shell。 (93) Korn shell 没有内置expr命令,因此expr在 Korn shell 脚本中使用时您使用的是外部expr命令。这本身不是问题。毕竟,这就是使用 Bourne shell 做事的方式,而 Bourne shell 也没有expr内置命令。但正如 M. Kohen 指出的那样,当 shell 具有内置函数时,人们可能更喜欢使用它们。 Korn shell 也有。

M. Kohen 指出算术替换在 Korn shell 中可用。重要的是要记住这一点替换,因此如果您不想将其作为命令运行,则必须对替换结果执行某些操作。 M. Kohen 的答案的更完整形式(修复运算符优先级错误)是:

AVERAGE="$(( (first + second + third) / 3))"

但在 Korn shell 中还有另外两种方法可以实现此目的。 Korn shell 有一个内置命令,let名为算术评估关于它的每个论点:

let "AVERAGE = (first + second + third) / 3"

该命令的每个参数都是一个表达式,因此需要像这里一样引用空格。

它还具有一段语法,在一个 ksh 克隆手册中被描述为“语法糖let”,其中表达式变成了该命令的单个参数:

(( AVERAGE = (first + second + third) / 3 ))

进一步阅读

  • KornShell 93 手册页。 2012年6月19日。美国电话电报公司。
  • 比尔·罗森布拉特和阿诺德·罗宾斯(2002 年 4 月)。 ”6.2.数值变量和算术”。 学习 Korn Shell。奥莱利.第二版。国际标准书号 0-596-00195-9

答案2

您可以在 shell 中使用内置算术支持,该支持由前面带有美元符号的双括号使用:

$(( (first + second + third) / 3))

expr这比不需要单独的进程(因此 fork、exec、管道管理和返回)更有效。

答案3

您的问题最初没有 Korn Shell 标签,所以我后来添加了它。如果您使用的是 Bash,则以下内容适用。


该命令expr可以执行各种数学计算。只需使用它来执行平均即可。

$ AVG=$(expr $SUM / 3)

此外,您通常会希望使用这种形式的子命令,$(...cmd...)而不是反引号。因此,将您的SUM=行改为:

SUM=$(expr $first + $second + $third)

如果您不确定某个特定命令可以为您做什么,请务必查看手册页。该命令expr具有它能够执行的所有操作man expr

参考

相关内容