zoukankan      html  css  js  c++  java
  • Shell入门教程:算术运算

    Bash的算术运算有以下几种方法:

    序号名称语法范例
    1 算术扩展 $((算术式)) r=$((2+5*8))
    2 使用外部程序 expr 算术式 r=`expr 4 + 5`
    3 使用 $[] $[算术式] r=$[4+5]
    4 使用内置命令 declare declare -i 变量=算式式 declare -i r=8+16
    5 使用内置命令 let let 算术式 let r=8+16

    第一节:算术扩展

    算术扩展语法:$((算术式))

    如果表达式中有变量,该变量名称之前最好不要加$这个符号,以免该变量不存在时,造成语法的错误。

    例如:

    unset i
    echo $((12+$i))

    由于变量i不存在(行1),所以行2会变成:echo $((12+)),这样语法就错了。

    但如果写成:

    echo $((12+i))

    这样可正确执行,因为 12+i 在$(())中是一个合法的算术表达式,就算变量i不存在,仍然可正确计算(结果为 12)。

    如果表达式中有“变量扩展”,则要加上$,例如: echo $((${j:-8}+2))。

    这里强化一下印象:

    $((12+i)) 正确范例
    $((12+$i)) 当i不存在时,语法错误,不建议使用
    $((12+${i})) 当i不存在时,语法错误,不建议使用
    $((${j:-8}+2)) 表达式中有“变量扩展”的正确范例

    以下是各种简单的算术运用:

    1、加 r=$((6+5)):r的值为11。

    2、减 r=$((6-5)):r的值为1。

    3、乘 r=$((6*5)):r的值为30。

    4、除 r=$((6/5)):r的值为1。注意,这是整除。

    5、求余数 r=$((32%3)):r的值为2。

    6、递增 1

    r=6
    r=$((++r))

    行2,r的值加1后,在赋值给r,因此,r的值递增1,变成7。

    7、递减1

    r=6
    r=$((--r))

    行2,r的值减1后,再赋值给r,因此,r的值递减1,变成5.

    8、运算后减1

    m=6
    r=$((4+m--))

    行2,m的值先代入6,和4做加法运算,得值为10,再赋值给r。接着,m的值减1。运算结果:r=10,m=5。

    如果要对变量本身做单元的算术运算,可使用 (()) 含括,这一点和 C 语言的语法很像。

    如下所示:

    1、指定运算

    ((i=168))

    设定变量i的值为168

    2、后置式递增

    i=168
    ((i++))

    i的值加1,变成169。

    第2行改成前置式递增 ((++i)) 也可以。

    3、后置式递减

    i=168
    ((i--))

    i的值减1,变成167.

    第2行改成前置式递减 ((--i)) 也可以。

    4、+= , -= , *= , /= 等 赋值运算

    i=168
    ((i+=60))

    i+=60 的意思同于 i=i+60,即i加上60后,把运算结果再赋值给i,i的值变成228。

    5、三元表达式

    i=168
    ((n=i<100?50:80))
    echo $n

    (()) 的用户其实和 let 的效果是一样的,例如:((i++)) 和 let "i++" 执行结果相同。可以把上述的 (())的用法都改用 let 来做。

    第二节:使用外部程序 expr 做算术运算

    外部程序 expr 本来作用,是在“标准输出”显示表示式的值。语法为:

    expr '算术式'

     例如:

    expr 3 + 2

    它会在屏幕上显示 5。

    利用这个特性,expr 就可以拿来当做一种算术运算的工具。而且,由于它是外部程序,和Shell的版本没什么关系,几乎在各种操作系统平台上都可以执行。因此,如果注重跨平台、可移植性,在script程序的开发上可以使用expr替代其他算术方法。

    在使用expr时,要特别注意“算术式”中是否含有bash shell的特殊字符,如 *、|、<、>、!、&、(、)等。如果有的话,要用 予以转义,否则会出现奇怪的错误信息。

    另外,在“算术式”中,运算符合操作数之间,至少要有一个以上的空格符隔开

    以下是 expr 的范例(请注意,这里是使用一对 ` 符号含括,而不是单引号):

    1、r=`expr 参数1 | 参数2`

    | 代表“或”之意。如果“参数1”存在、非空、不是0,则传回“参数1”的值,否则,传回“参数2”的值。由于 | 是特殊字符,所以要写成转义字符 | 。

    用例:

    r=`expr 3 | 0`

    r的值为3。

    r=`expr 0 | 2`

    r的值为2。

    2、r=`expr 参数1 & 参数2`

    如果“参数1”和“参数2”皆存在、非空、不是0,则传回“参数1”的值,否则传回0。

    用例:

    r=`expr 3 & 0`

    3、加

    r=`expr 4 + 5`

    r的值为9。

    4、减

    r=`expr 4 - 5`

    r的值为-1。

    5、递减1

    r=5
    r=`expr $r + 1`

    第三节:使用$[]做算术运算

    使用$[]做算术运算和$(())类似。

    语法:r=$[算术式]

    以下列出简单的算术运用:

    1、加:r=$[4+5]

    2、减:r=$[4-5]

    3、乘:r=$[4*5]

    4、除:r=$[22/5] (整除)

    5、求余数:r=$[100%43],r的值为14。

    6、递增1

    r=5
    r=$[r+1]

    第四节:使用内置命令 declare 做算术运算

    语法:declare -i 变量=算式式

    例如:

    declare -i k
    k=8+16
    
    echo $k
    

    行1,使用declare事先设定变量k的属性为“整数”。

    行2,由于k是整数,8+16就不再是字符串,而是一个算式,因此,bash会对它进行运算,最后把结果24赋值个k。

    必须注意的是:

    • 算式中,运算符和操作数之间不可以有空格符,要紧密连接。
    • 特殊符号不必使用  转义。例如:乘法*,乘法**。
    • 算式中,可包含其他变量,变量之前不必加上$。

    使用 declare -i 设定变量之后,加减乘除等运算,就非常直观了:

    declare -i k
    
    k=8+16
    k=16-8
    k=5*3
    k=22/5
    k=2**3
    k=100%43
    
    declare -i j
    j=k+1  #或 j=$k+1
    echo $j
    

    行3~8,分别是加、减、乘、除、乘方、求余数等运算。

    行10,设定变量j也是整数。

    行11,算式中可以包含变量,但不必加上‘$’;k的变量值代入其中,加1后,赋值给变量j。

    第五节:使用内置命令 let 做算术运算

    let 的用法也很简单,其注意事项同 declare。

    以下是let的范例:

    let k=8+16
    let k=16-8
    let k=5*3
    let k=22/5
    let k=2**3
    let k=100%43
    let j=k+1

    其意自明,这里就不再赘述了。

    另外,可以使用“空格符”让表达式可读性高一些,但这时,必须使用“引号”含括表达式才行,比如:

    let "k = k + 5"
    
  • 相关阅读:
    PHP中使用CURL实现GET和POST请求
    PHP 正则表达式匹配函数 preg_match 与 preg_match_all
    微信跳转黑科技:微信跳转技术让微信电商从此不缺流量
    PHP通过get方法获得form表单数据方法总结
    php获取微信基础接口凭证Access_token
    PHP命名空间与自动加载类详解
    PHP如何搭建百度Ueditor富文本编辑器
    PHP调用微博接口实现微博登录的方法示例
    PHP常用日期加减计算方法实例
    微信公众平台---带参数二维码生成和扫描事件
  • 原文地址:https://www.cnblogs.com/52php/p/5669921.html
Copyright © 2011-2022 走看看