shell脚本之二 数学运算

shell脚本之二 数学运算

退出状态

  • 在通常调用的shell脚本执行中经常会需要执行结束后提供一个返回值,这个值通常来说就是退出状态码,我们可以自定义退出状态码来表示脚本执行的不同状态

    #!/bin/bash
    #退出状态码,最大为255,超过则进行模运算
    #测试退出状态码
    echo 开始执行脚本
    echo 脚本执行完毕,正在退出
    exit 5
    
  • 除了自己定义退出状态码,shell中默认有一些特定意义的状态码,比如正常执行状态是0,异常退出状态是1等。

    退出码的值含义例子注释
    1通用错误let “var1 = 1/0”各种各样的错误都可能使用这个退出码, 比如"除0错误"
    2shell内建命令使用错误(Bash文档上有说明)很少看到, 通常情况下退出码都为1
    126命令调用不能执行程序或命令的权限是不可执行的
    127未知命令估计是$PATH不对, 或者是命令拼写错误
    128exit的参数错误exit 3.14159exit只能以整数作为参数, 范围是0 - 255(见脚注)
    128+n信号"n"的致命错误kill -9 脚本的$PPID$? 返回137(128 + 9)
    130用Control-C来结束脚本Control-C是信号2的致命错误, (130 = 128 + 2, 见上边)

shell数学运算

  • shell也可以用来计算数学运算,但对应的组件各有利弊

expr命令

  • expr命令的英文全称是“expression”,即是表达式的意思,作用是一个命令行的计数器,常用于在UNIX/LINUX系统中求表达式变量的值,一般用于整数值,也可用于字符串。
  • 语法格式: expr arg1 运算符 arg2
    #计算数值
    [root@dsj-1 test]# expr 14 % 9
    5
    [root@dsj-1 test]# expr 10 + 10
    20
    [root@dsj-1 test]# expr 30 / 3 / 2
    5
    [root@dsj-1 test]# expr 30 * 3 
    90
    #计算字符串长度
    [root@dsj-1 test]# expr length "this is a test"
    14
    #抓取字串
    [root@dsj-1 test]# expr substr "this is a test" 3 5
    is is
    #获取下标
    [root@dsj-1 test]# expr index "sarasara" a
    2
    

使用方括号执行运算

  • 将数学表达式放在$[]中,bash便不会将其识别为特殊符号。

    #!/bin/bash
    
    var1=10
    var2=50
    var3=45
    var4=$[$var1 * ($var2 - $var3)]
    echo 'The final result is '$var4
    
  • 但是它只支持整数运算,使用浮点数会报错

使用bc计算器

  • bc命令来自于英文词组“Binary Calculator”的缩写,中文译为二进制计算器,其功能是用于数字计算。Bash解释器仅能够进行整数计算,而不支持浮点运算,因此有时要用到bc命令进行高精度的数字计算工作。

  • bc使用
    直接输入bc执行即可进入bc计算器命令行界面

    [root@dsj-1 test]# bc
    bc 1.06.95
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    #计算得出指定的浮点数乘法结果
    1.235*3
    3.705
    #设定计算精度为小数点后3位,取浮点数除法结果
    scale=3
    3/8
    .375
    分别计算整数的平方与平方根
    8^2
    64
    sqrt(100)
    10.000
    quit
    [root@dsj-1 test]# 
    
  • 脚本里使用bc计算
    利用管道符 | 将表达式传送给bc,并将计算结果赋值给变量

    #!/bin/bash
    var1=10.46
    var2=43.67
    var3=33.2
    var4=71
    var5=$(echo "scale=2; $var1*$var2+$var3*$var4" | bc)
    echo The final answer is $var5
    

使用内联重定向

  • 对于复杂运算,可以使用内联输入重定向,直接在命令行中重定向数据
  • 格式
    var=$(bc << EOF
    options
    statements
    expression
    EOF
    )
    
  • 样例
    #!/bin/bash
    
    var1=10.45
    var2=43.67
    var3=33.2
    var4=71
    
    var5=$(bc <<EOF
    scale=4
    a1 = $var1 * $var2
    b1 = $var3 * $var4
    a1 + b1
    EOF
    )
    echo The final answer for this mess is $var5
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值