shell 脚本算术运算

Vij*_*jay 5 unix shell ksh

一般来说,我将在 shell 脚本中使用 expr 进行算术运算。

有没有一种方法可以让我们在不使用 expr 的情况下在 shell 脚本中提出算术运算?

jim*_*ara 5

现代 shell(在我看来,POSIX 兼容 = 现代)支持算术运算:+ - / * 在有符号长整型变量 +/- 2147483647 上。

使用 awk 进行双精度、15 位有效数字它也可以执行 sqrt。

使用 bc -l 将精度扩展至最多 20 位有效数字。

您已经看到的 shell 语法 (zed_0xff):

a=$(( 13 * 2 ))
a=$(( $2 / 2 ))
b=$(( $a - 1 ))
a=(( $a + $b ))
Run Code Online (Sandbox Code Playgroud)

awk 本身执行双精度浮点算术运算。它还具有 sqrt、cos、sin .... 请参阅:

http://people.cs.uu.nl/piet/docs/nawk/nawk_toc.html

bc 有一些定义的函数和扩展精度,可通过 -l 选项使用:

BC-L

例子:

echo 'sqrt(.977)' | bc -l
Run Code Online (Sandbox Code Playgroud)


zed*_*xff 4

如果您使用 ksh,您是否尝试过阅读“man ksh”?

例如,“man bash”有足够的关于使用 bash 进行算术的信息。

命令 typeset -i 可用于指定变量必须被视为整数,例如 typeset -i MYVAR 指定变量 MYVAR 是整数而不是字符串。在 typeset 命令之后,尝试将非整数值分配给变量将失败:

   $ typeset -i MYVAR
   $ MYVAR=56
   $ echo $MYVAR
   56
   $ MYVAR=fred
   ksh: fred: bad number
   $
Run Code Online (Sandbox Code Playgroud)

要对变量或 shell 脚本内执行算术运算,请使用 let 命令。let 将其参数计算为简单的算术表达式。例如:

   $ let ans=$MYVAR+45
   echo $ans
   101
   $
Run Code Online (Sandbox Code Playgroud)

上面的表达式也可以写成如下:

   $ echo $(($MYVAR+45))
   101
   $
Run Code Online (Sandbox Code Playgroud)

$(( 和 )) 中包含的任何内容都被 Korn shell 解释为算术表达式