shell之变量的数值计算实践详解

一、算术运算符

如果要执行算术运算符,就离不开各种运算符号,和其他编程语言类似,shell也有很多算术运算符。

下面就给大家来介绍一些常见的shell算术运算符以及常见的shell算术运算命令。

1.shell中常见的算术运算符

+、-  :加法(或正括号),减法(或负号)

*、/、%:乘法、除法、取余(取模)

**:幂运算

++、--:增加及减少、可前置也可放在变量结尾

!、&&、||:逻辑非(取反)、逻辑与(and)、逻辑或(or)

<、<=、>、>=:比较符号(小于、小于等于、大于、大于等于)

==、!=、=:比较符号(相等、不相等,对于字符串“=”也可以表示相当于)

<<、>>:向左移位、向右移位

~、|、&、^:按位取反、按位异或、按位与、按位或

=、+=、-=、*=、/=、%=:赋值运算符,例如a+=1相当于a=a+1,a-=1相当于a=a-1*

2.shell中常见的算术运算命令

(()):用于整数运算的常用运算符,效率很高

let:用于整数运算,类似于“(())”

expr:可用于整数运算,但还有很多其他的额外功能

bc:Linux下的一个计算器程序(适合整数及小数运算)

$[]:用于整数运算

awk:awk既可以用于整数运算,也可以用于小数运算。

declare:定义变量值和属性,-i参数可以用于定义整形变量,做运算。

双小括号“(())”数值运算命令

双小括号的作用:是进行数值运算与数值进行比较,它的效率很高,用法灵活。

其语法如下所示:

((i=i+1)):此种书写方法作为运算后赋值法,即将i+1的运算后结果赋值给变量i。注意,不能用echo((i=i+1))的形式输出表达式的值,但可以用echo $((i=i+1))输出其值。

i=$((i+1)):可以在(())前加$符,表示将表达式运算后赋值给i

((8>7&&5==5)):可以进行比较操作,还可以加入逻辑与和逻辑或,用于条件判断

echo $((2+1)):需要直接输出运算表达式的运算结果时,可以在“(())”前加$符号。

例如以下案例:


注意:上面涉及的数字及变量必须为整数(整型),不能是小数(浮点数)或字符串。

后面的bc和awk命令可以用于进行小数(浮点数)运算,但一般用到的较少。


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


在(())中使用变量时可以去掉变量前的$符号。

(())表达式在命令执行时不需要加$符号,直接使用((6%2))形式即可,但是如果需要输出,就要加$符

(())里的所有字符之间没有空格、有一个或多个空格都不会影响结果。

下面运行个简单的脚本示例:

[root@kang ~]# vim a.sh
#!/bin/bash
a=6
b=2
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a%b=$(($a%$b))"
echo "a**b=$(($a**$b))"

二、let运算命令的用法

let运算命令的语法格式为:let赋值表达式

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


接下来这个案例就是利用了let的方式实现了监控web服务状态,如果访问两次失败,则报警

#!/bin/bash
Checkurl(){
timeout=5
fails=0
success=0
while true
 do
  wget --timeout=$timeout --tries=1 http://www.baidu.com -q -o /dev/null
  if [ $? -ne 0 ];then
   let fails=fails+1
  else
   let success+=1
  fi
  if [ $success -ge 1 ];then
   echo success
   exit 0
  fi
  if [ $fails -ge 2 ];then
   Critical="sys is down."
   echo $Critical|tee|mail -s "$Critical" 15011147011@163.com
   exit 2
  fi
done
}
Checkurl



三、expr命令的用法

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

1.expr用于计算


要注意:在使用expr时,运算符及用于计算的数字左右都至少有一个空格,否则会报错。

使用乘号时,必须使用反斜线屏蔽其特定含义,因为shell可能会误解*号的含义。

2.expr配合变量计算

expr在shell中可配合变量进行计算,但需要使用反引号将计算表达式括起来。

例如:


expr的企业级实战案例详解

1.判断一个变量值或字符串是否为整数

通过expr判断变量或字符串是否为整数:


结论:利用expr做计算,将一个未知的变量和一个已知的整数相加,看返回值是否为0,如果为0就认为做加法的变量为整数,否则就不是整数。

通过传参内容判断是否为整数:


输出结果:


通过read读入持续等待输入例子:


输出结果:


将上面用到的混合运算小程序改成输入两个参数后进行计算的程序,并且要能判断传参的个数及通过expr判断传入的参数是否为整数。

例如1:


输出结果:


例如2:


输出结果:


此外,用expr match功能进行整数判断时,可执行man expr命令获得帮助。

例如:


输出结果:


2.expr的特殊用法:判断文件扩展名是否符合要求

通过expr判断文件扩展名是否符合要求


输出结果:


3.通过expr计算字符串的长度


编写如下shell脚本,打印语句中字符数不大于6的单词。


执行结果如下:


四、bc命令的用法

bc是unix/Linux下的计算器,因此,除了可以作为计算器来使用,还可以作为命令行计算工具使用


将bc用在命令行下面实现运算功能


利用bc配合变量运算:


根据bc所具有的特殊性来看,如果是小数,则选择bc运算没有问题,若是整数场景,可用“(())”、let、expr等。

接下来通过一条命令计算输出1+2+3+..........+10的表达式,并计算出结果,使用bc命令计算


bc命令的独有特点是除了支持整数运算之外,还支持小数运算。

五、awk实现计算

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


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

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


七、$[]符号的运算示例


打印数学杨辉三角的脚本


输出结果如下:


八、基于shell变量输入read命令的运算实践

shell变量除了可以直接赋值或脚本传参外,还可以使用read命令从标准输入中获得,read为bash内置命令,可通过help read查看帮助

常用参数:

-p prompt:设置提示信息

-t timeout:设置输入等待的时间,单位默认为秒。

例如:


提示:read的读入功能就相当于交互式接受用户输入,然后给变量赋值。

接下来把前面加减乘除计算传参的脚本改成通过read方式读入整数变量。

例如:


输出结果如下:


好了,到这里有关于shell之变量的数值计算实践就演示完毕了,希望对你有所帮助!!!!再见!!元宵节快乐!!!!再见再见再见

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值