• 五、数学运算符


    expr命令

    对数字的基本计算做比较时,假为0,真为1,特殊符号需要转义。

    只支持整数运算

    注意要有空格

     image

    使用expr命令时需要加进行转义,因为部分符号是保留关键字

    image

    例:对数字的基本计算

    [root@tzPC ~]# expr 2>5
    2>5
    [root@tzPC ~]# expr 2 > 5
    0
    [root@tzPC ~]# expr 6 > 5
    1
    [root@tzPC ~]# expr 3 * 5
    15
    [root@tzPC ~]# expr 1 + 1
    2

    例:对字符串的运算

    [root@tzPC ~]# expr length "ni hao"
    6
    [root@tzPC ~]# expr substr "ni hao" 2 4  #从第2个字符取4个
    i ha

    例:比较num1跟num2的大小

    [root@localhost ~]# num1=30
    [root@localhost ~]# num2=50
    [root@localhost ~]# expr $num1 > $num2
    0
    [root@localhost ~]# num3=`expr $num1 > $num2`
    

     例:脚本中使用

    [root@tzPC Script]# bash test2
    The result is 0
    [root@tzPC Script]# cat test2
    #!/bin/bash
    a=1
    b=2
    c=$(expr $a / $b)
    echo The result is $c

    使用方括号

    使用方括号不需要转义

    [root@tzPC Script]# bash test3
    The final result is 500
    [root@tzPC Script]# cat test3
    #!/bin/bash
    var1=100
    var2=50
    var3=45
    var4=$[$var1 * ($var2 - $var3)]
    echo The final result is $var4

    使用$(())

    格式:$((表达式1,表达2))

    特点:

    1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。a++  等价于 a=a+1

    2、在双括号结构中,所有变量可以不加入:“$”符号前缀。

    3、双括号可以进行逻辑运算,四则运算

    4、双括号结构 扩展了for,while,if条件测试运算

    5、支持多个表达式运算,各个表达式之间用“,”分开

    常用的算数运算符

    运算符

       意义

    ++   --

    递增及递减,可前置也可以后置

    +  -  ! ~

    一元运算的正负号 逻辑与取反

    +  -  *  /   %

    加减乘除与余数

    <   <=   >   >=

    比较大小符号

    ==   !=

    相等 不相等

    >>  <<

    向左位移 向右位移

    & ^   |

    位的与 位的异或 位的或

    &&  ||

    逻辑与 逻辑或

    ? :

    条件判断

    例:

    [root@tzPC ~]# ((a=1+2*3-2))
    [root@tzPC ~]# echo $a
    5
    [root@tzPC ~]# b=$((1+2))
    [root@tzPC ~]# echo $b
    3
    [root@tzPC ~]# echo $((2*3))
    6

    例:递增递减

    [root@tzPC ~]# echo $b
    3
    [root@tzPC ~]# echo $((b++))
    3
    [root@tzPC ~]# echo $b
    4

     说明: a++或a--为先赋值再+1或减1    ++a或--a为先加1或减1,然后再进行赋值

    例:求1到100的和

    [root@tzPC ~]# echo $((100*(1+100)/2))
    5050

    练习题

    要求:提示用户输入一个正整数num,计算1+2+3+…+num的值。

    需要判断是否为整数

    [root@localhost ~]# num1=56.1
    [root@localhost ~]# expr $num1 + 1
    expr: 非整数参数
    [root@localhost ~]# echo $?
    2
    #可以看到报错,输出结果为2
    [root@localhost ~]# num1=56
    [root@localhost ~]# expr $num1 + 1
    57
    [root@localhost ~]# echo $?
    0
    
    #输出结果为0表示执行成功

    答案

    [root@localhost ShellScript]# cat example_4.sh
    #!/bin/bash
    while true
    do
    read -p "pls input a positive number:" num
    expr $num + 1 &> /dev/null
    if [ $? -eq 0 ];then
            if [ `expr $num > 0` -eq 1 ];then
                    for((i=1;i<=$num;i++))
                    do
                            sum=`expr $sum + $i`
                    done
                    echo "1+2+3+...+$num=$sum"
                    exit
            fi
    fi
    echo "error,input enlegal"
    done
    答案

    浮点运算bc命令

    bc是bash自带的运算器,支持浮点数运算,变量,注释(/* */),表达式,编程语句,函数。

    如果不指定内建变量scale,默认还是得到的整数

    自带变量scale可以设置,默认为0,也就是为整型

    支持+,-,*,/,%,^运算

    num1 + num2
    num1 - num2
    num1 * num2
    num1 / num2
    num1 % num2
    num1 ^ num2  //指数运算
    

    输入bc回车进入互动模式

    [root@localhost ShellScript]# 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'.
    5+5
    10
    5/3
    1
    scale=2  //保留小数点后两位
    23/5
    4.60
    

    或者

    [root@localhost ShellScript]# echo "12+45" | bc
    57
    

    通过scale设置精确度

    [root@localhost ShellScript]# echo "scale=4;12.56*45.88" | bc
    576.2528
    

    在脚本中使用bc

    [root@tzPC Script]# bash test4
    The answer is .6880
    [root@tzPC Script]# cat test4
    #!/bin/bash
    var1=$(echo "scale=4; 3.44 / 5" | bc)
    echo The answer is $var1

    bc可以识别内联输入

    [root@tzPC Script]# bash test6
    The final answer for this mess is 1578.184
    [root@tzPC Script]# cat test6
    #!/bin/bash
    var1=10.4
    var2=43.21
    var3=33.2
    var4=34
    var5=$(bc << EOF
    scale =4
    a1 = ( $var1 * $var2)
    b1 = ( $var3 * $var4)
    a1+b1
    EOF
    )
    echo The final answer for this mess is $var5

    在bash计算器中创建的变量只能在bash计算器中使用,不能在脚本中使用

    简易到爆的乘法计算器

    [root@localhost ShellScript]# cat bc.sh
    #!/bin/bash
    
    read -p "num1:" num1
    read -p "num2:" num2
    echo "scale=4;$num1*$num2" | bc
    或者
    num3=`echo "scale=4;$num1*$num2" | bc`
    echo $num3
    

    退出脚本exit

     Shell中每个命令都使用退出状态码来高速shell已经运行完毕,退出状态码取值范围0~255的证书。

    一个成功结束的命令的退出状态码是0。

    root@tzPC Script]# echo $?
    0
    [root@tzPC Script]# sdfasdf
    bash: sdfasdf: 未找到命令
    [root@tzPC Script]# echo $?
    127
    状态码 描述
    0 命令成功结束
    1

    一般性未知错误(提供了无效参数)

    2 不适合的shell命令
    126 命令不可执行(没有执行权限)
    127 没有找到命令
    128 无效的退出参数
    128+x 与Linux信号x相关的严重错误
    130 通过Ctrl+C终止的命令
    255 正常范围之外的退出状态码

     退出状态码可以指定,也可以为变量

    [root@tzPC Script]# cat test3
    #!/bin/bash
    var1=100
    var2=50
    var3=45
    var4=$[$var1 * ($var2 - $var3)]
    echo The final result is $var4
    exit 5 #或者为 exit $var4

    如果退出码大于255,结果就会变为指定的数值除以256得到的余数。

    今天的学习是为了以后的工作更加的轻松!
  • 相关阅读:
    java并发之CopyOnWriteArraySet
    MySQL 锁
    MySQL 汇总
    MySQL 删除重复数据
    插入排序-PHP
    选择排序-PHP
    快速排序-PHP
    一文轻松读懂微服务、集群、分布式的概念和区别一文轻松读懂微服务、集群、分布式的概念和区别
    k8s与docker简介
    冒泡排序-PHP
  • 原文地址:https://www.cnblogs.com/tz90/p/13306582.html
Copyright © 2020-2023  润新知