千家信息网

shell scripts之算数运算详解

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,算数运算符如下:运算操作符与运算命令:1、双小括号"( ( ) )"数值运算命令双小括号" ( ( ) ) "的作用是进行数值运算与数值比较,它的效率最高,用法灵活,是经常被采用的运算操作符,其操作方
千家信息网最后更新 2025年01月23日shell scripts之算数运算详解

算数运算符如下:

运算操作符与运算命令:

1、双小括号"( ( ) )"数值运算命令

双小括号" ( ( ) ) "的作用是进行数值运算与数值比较,它的效率最高,用法灵活,是经常被采用的运算操作符,其操作方法如下:

执行echo$((a++))和echo$((a--))命令输出整个表达式时,输出的值即为a的值,表达式执行完毕后,会对a进行++、--的运算,而执行echo$((++a))和echo$((--a))命令输出整个表达式时,会先对a进行++、--的运算,然后再输出表达式的值,即为a运算后的值。

注意:有关++、--运算的记忆方法:

  • 变量a在运算符之前,输出表达式的值为a,然后a自增或自减;变量a在运算符之后,输出表达式会先自增或自减,表达式的值就是自增或自减后a的值。
  • "(())"表达式在命令行执行时不需要加$符号,直接使用((6%2))形式即可,但是如果需要输出,就要加$符,例如:echo$((6%2))。
  • "(())"里的所有字符之间没有空格、有一个或多个空格都不会影响结果。

使用举例:

[root@localhost ~]# echo $(( 6+2 ))    #加法8[root@localhost ~]# echo $(( 6-2 ))    #减法4[root@localhost ~]# echo $(( 6*2 ))    #乘法12[root@localhost ~]# echo $(( 6/2 ))    #除法3[root@localhost ~]# echo $(( 6%2 ))    #取余0[root@localhost ~]# echo $(( 6**2 ))    #求平方36[root@localhost ~]# a=3     #给变量赋值[root@localhost ~]# echo $(( a++ ))    #先输出变量值,再+13[root@localhost ~]# echo ${a}     #再查看变量,发现+1了4[root@localhost ~]# echo $(( a-- ))   #先输出变量值,再-14[root@localhost ~]# echo ${a}    #再查看变量,发现-1了3[root@localhost ~]# echo $(( ++a ))    #先+1,再输出变量值,输出的是+1后的值4[root@localhost ~]# echo ${a}     #确认变量值4[root@localhost ~]# echo $(( --a ))     #先-1,再输出变量值3[root@localhost ~]# echo ${a}      #查看确认3

2、let运算命令的用法

let赋值表达式的功能等同于"((赋值表达式))"

使用举例:

[root@localhost ~]# i=1[root@localhost ~]# echo $i1[root@localhost ~]# let i=i+8     #加8[root@localhost ~]# echo $i      #输出9[root@localhost ~]# let i=i-1     #i-1[root@localhost ~]# echo $i     #输出8[root@localhost ~]# let i++     #我在shell  script中常使用这种方法,默认+1[root@localhost ~]# echo $i9[root@localhost ~]# let i--       #i-1[root@localhost ~]# echo $i8

3、expr命令的用法

作用:

expr(evaluate(求值)expressions(表达式))命令既可以用于整数运算,也可以用于相关字符串长度、匹配等的运算处理。

(1)expr用于计算:

[root@localhost ~]# expr 2 + 35[root@localhost ~]# expr 2 \* 3     #*号需要转义后使用6[root@localhost ~]# expr 6 / 32[root@localhost ~]# expr 7 % 31

在使用expr时需要注意:

  • 运算符及用于计算的数字左右都至少有一个空格,否则会报错。
  • 使用乘号时,必须用反斜杠将其进行转义(转为普通字符),因为Shell可能会误解星号的含义。

(2)expr配合变量计算

[root@localhost ~]# i=5[root@localhost ~]# i=`expr ${i} + 5`      #需要使用反撇号将其括起来,注意变量和数字符号两边要有空格[root@localhost ~]# echo ${i}10

(3)判断一个变量值或字符串是否为整数

实现原理是,利用以expr做计算时变量或字符串必须是整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,看命令返回的值是否为0。如果为0,就认为做加法的变量或字符串为整数,否则就不是整数。

示例1:

[root@localhost ~]# a=2        [root@localhost ~]# expr ${a} + 57[root@localhost ~]# echo $?       #输出为0,说明变量a是一个整数0[root@localhost ~]# b=lvjianzhao    #定义一个字符变量[root@localhost ~]# expr ${b} + 5    #实际上会直接报错expr: 非整数参数[root@localhost ~]# echo $?       #输出为非0,则表示变量b不是一个整数2

示例2:

[root@localhost ~]# vim test.sh #!/bin/bashexpr $1 + 4 &> /dev/nullif [ $? -eq 0 ]        then          echo int        else          echo charsfi[root@localhost ~]# sh test.sh aaa    chars                   #输出的结果是字符串[root@localhost ~]# sh test.sh 34int               #输出的结果是整数型

示例3:

#!/bin/bashtuichu(){        exit 1}while truedo        read -p "pls input:" a        if [ $a == exit ]          then                tuichu              #调用开头定义的函数        fi        expr $a + 0 > /dev/null 2>&1        [ $? -eq 0 ] && echo int || echo charsdone[root@localhost ~]# sh test.sh     #执行脚本pls input:22             #输入数字进行测试intpls input:dfdf           #输入字符进行测试charspls input:exit            #输入exit,将触发函数,而退出脚本,若不定义这个函数,只能通过ctrl+c强制中断脚本执行chars[root@localhost ~]#

4、bc计算机的用法

(1)直接在命令模式下输入bc,按下回车后即可直接使用,如下:

[root@localhost ~]# bc      #输入bc进入计算机环境bc 1.06.95                                 ........................#省略部分内容1+8         #输入后按回车即可得到结果99/336*212

(2)将bc用在命令行下面,以实现运算功能:

[root@localhost ~]# echo 3+4 | bc       #通过echo命令结合管道符输出到bc计算机7[root@localhost ~]# echo "3.4+5.6" | bc9.0[root@localhost ~]# echo "3.2-2.5" | bc.7[root@localhost ~]# echo "scale=2;355/113" | bc   #使用scale参数可以设置保留的小数位3.14[root@localhost ~]# echo "scale=6;355/113" | bc3.141592

(3)利用bc配合变量运算:

[root@localhost ~]# i=5[root@localhost ~]# i=`echo $i+6|bc`    利用echo输出,通过管道符交给bc,此方法效率较低,一般不使用。[root@localhost ~]# echo $i11

提示:根据bc所具有的特殊性来看,如果是小数,则选择bc运算没有问题(更推荐使用awk);若是整数场景,可用"( ( ) )"、let、expr等。

(4)使用一条命令计算输出1+2+3....+10的表达式,并计算结果(使用bc计算机实现)

生成1+2+3....+10表达式的方法有:

[root@localhost ~]# seq -s "+" 10           #seq是生成数字序列,-s是指定数字序列之间的分隔符1+2+3+4+5+6+7+8+9+10[root@localhost ~]# echo {1..10} | tr " " "+"   #生成以空格为间隔的数字序列,并交给tr将空格替换为+号1+2+3+4+5+6+7+8+9+10

实现上面需求的多种方法如下:

#使用bc计算[root@localhost ~]# echo `seq -s "+" 10`=`seq -s "+" 10 | bc`1+2+3+4+5+6+7+8+9+10=55#使用(())计算[root@localhost ~]# echo `seq -s "+" 10`=$((`seq -s "+" 10`))1+2+3+4+5+6+7+8+9+10=55#使用expr计算[root@localhost ~]# echo `seq -s '+' 10`=`seq -s " + " 10|xargs expr`1+2+3+4+5+6+7+8+9+10=55使用$[ ] 来计算[root@localhost ~]# echo `seq -s '+' 10`=$(echo $[ `seq -s '+' 10` ])1+2+3+4+5+6+7+8+9+10=55

5、awk实现计算功能

利用awk进行运算的效果也很好,适合小数和整数,特别是命令行计算,尤其是小数,运算很精准,好用。

使用举例:

[root@localhost ~]# echo "7.7 8.5" |awk '{print ($1-$2)}'-0.8[root@localhost ~]# echo "7.7 3.5" |awk '{print ($1-$2)}'4.2[root@localhost ~]# echo "358 114" | awk '{print ($1-2)/$2}'3.12281[root@localhost ~]# echo "3 8" | awk '{print ($1+3)*$2}'48

6、declare(同typeset)命令的用法

需要使用typeset定义整数变量,直接进行计算,这个方法不常用,因为需要定义才能生效。

使用范例:

[root@localhost ~]# declare -i A=20 B=3    #-i参数可以将变量定义为整型[root@localhost ~]# A=A+B    #因为已声明是整型,因此可以直接进行运算了。[root@localhost ~]# echo $A     #输出查看23

7、$[ ]符号的运算

格式基本如下(至于运算符,则和其他的运算工具一样):

[root@localhost ~]# i=4[root@localhost ~]# i=$[i+3][root@localhost ~]# echo ${i}7[root@localhost ~]# echo $[2*3]6[root@localhost ~]# echo $[9/3]3[root@localhost ~]# echo $[10%3]1[root@localhost ~]# echo $[1%3]1[root@localhost ~]# echo $[3/2]1

-------- 本文至此结束,感谢阅读 --------

运算 输出 变量 命令 整数 表达式 字符 字符串 数字 方法 量值 输入 空格 结果 运算符 小数 计算机 函数 功能 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何查询不同数据库中基因的编码 什么浏览器没有网络安全狗 中国大唐武汉网络技术有限公司 中国联通网络技术岗面试问什么 信息网络安全处置流程 网络连不上无法连接服务器 家庭教育和网络安全手抄报 solr 操作数据库 互联网 科技 十三五 贵州康之健互联网科技有限公司 航运信息计算机网络技术问题 华为数据库技术应知应会题库 网络安全知识漫画版 杭州市网络安全工作会议 阿里飞燕邯郸工业互联网科技 开源网校软件开发费用 网络安全方向有什么 吴江区提供网络技术怎么样 数据库服务器本机 比较靠谱的数据库培训 软件开发去哪家翰诺科技好 从化区数据网络技术开发服务标准 网络技术应用与研究 变电站档案资料数据库建设方案 数据库 什么是关系 读取本地数据库并调用接口上传 重生软件开发750万 网络安全方向有什么 广州大学网络安全推免情况 网络安全四层智能革命
0