这是我的 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
。