《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算

本文讲解shell编程中变量的数值计算。

1.常见的算术运算符:

提示:

此处对于我自己来说++、--比较难理解,之前一看到脚本中有这些符号,就看不懂了,所以在此举例说明一下:

[[email protected] ~]# a=10                  ==>定义变量a
[[email protected] ~]# echo $((a++))

==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值, 此前定义的变量a为10,所以此处的值为10.
10
[[email protected] ~]# echo $a            ==>执行上述表达式后,因为有a++,因此a会自增1,所以输出的值为11
11
[[email protected] ~]# a=11                 ==>定义变量a

[[email protected] ~]# echo $((a--))

==>如果a在运算符++或--的前面,那么输出整个表达式时,会输出a的值,前定义的a为11,所以此处的值为11.

11
[[email protected] ~]# echo $a             ==>执行上述表达式后,因为有a--,因此a会自减1,所以输出的值为10
10
[[email protected] ~]# a=10
[[email protected] ~]# echo $((--a))

==>如果a在运算符++或--的后面,那么输出整个表达式时,先进行自增或自减计算,因为a为10,  且要自减,所以表达式的值为9.

9
[[email protected] ~]# echo $a            ==>执行上述表达式后,a自减1,所以表达式的值为9.

9
[[email protected] ~]# echo $((++a))

==>如果a在运算符++或--的后面,那么输出整个表达式时,先进行自增或自减计算,因为a为9,且要自增1,所以表达式的值为10

10
[[email protected] ~]# echo $a            ==>执行上述表达式后,a自增1,所以表达式的值为10

10

总结:

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

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

记忆口诀:

变量a在运算符之前,输出表达式的值为a,然后a自增或自减;

变量a在运算符之后,输出的表达式会先进行自增或自减,表达式的值就是自增或自减后a的值。

常见的算术运算命令:

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

双小括号"(())"数值运算的基础语法

双小括号"(())"的作用是进行数值运算与数值比较,效率很高,用法灵活,是企业场景运维人员经常采用的运算操作符。

操作方法见下表:

提示:

(())进行比较操作时,如果"echo $((2>1))"返回结果为1则表示真,如果返回结果为0,则表示假。

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

符号,如:echo  $((2+3))。

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

(2)let运算命令的用法

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

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

let赋值:举例:let  i=i+2   ==>等同于((i=i+2))

(3)expr命令的用法

expr命令的基本用法:

expr既可以用于整数运算,也可以用于相关字符串长度、匹配等的运算处理。

应用1:expr用于计算

语法:expr  Expression    ==>expression中可包含变量

例如:

[[email protected] ~]# expr 1 + 1
2
[[email protected] ~]# expr 1 \* 1
1

注意:在使用expr时,要注意以下2点:

  • 运算符及用于计算的数字左右都至少有一个空格,否则会报错。
  • 使用乘号时,必须用反斜线进行转义。

应用2:判断一个变量值或字符串是否为整数

此应用利用以expr做计算时变量或字符创必须为整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,

看返回的值是否为0,如果为0,就认为做加法的变量或字符串为整数,否则就不是整数。

另外,expr match功能也可以进行整数判断,格式如下:

expr match $string  substring

在$string字符串中匹配substring字符串,然后返回匹配到的substring字符串的长度,若找不到,则返回0。

应用3:expr判断文件扩展名是否符合要求:

举例说明:

判断是否是以.pub为扩展名:

[[email protected] scripts]# cat expr.sh
#!/bin/sh
if expr "$1" : ".*\.pub" &>/dev/null    ==>注意:在此冒号前后要有空格
   then
     echo "you are using $1"
   else 
     echo "pls use *.pub file"
fi

[[email protected] scripts]# sh expr.sh qq.pub
you are using qq.pub
[[email protected] scripts]# sh expr.sh qq
pls use *.pub file

应用4:通过expr计算字符串的长度

语法:expr length  $变量名或字符串

(4)bc命令的用法

bc是Linux下的计算器,当然除了作为计算器使用,还可以作为命令行计算工具使用。

使用方法如下:

[[email protected] scripts]#  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‘.
2+3
5
3*3
9
[[email protected] scripts]# echo 2+3|bc
5
[[email protected] scripts]# echo "scale=2;9/2" | bc   ==>使用scale=2保留2位小数
4.50
[[email protected] scripts]# echo "scale=2;355/113" | bc
3.14

(5)awk实现计算

利用awk运算的效果也很好,适合小数和整数,尤其是小数,运算很精确。

示例如下:

[[email protected] ~]# echo "5 6" | awk ‘{print ($1+$2)}‘

==>$1为第1个数字,$2为第2个数字,用空格分开 ,注意awk ‘{ }‘的单引号
11
[[email protected] ~]# echo "5.5 6.6" | awk ‘{print ($1+$2)}‘
12.1

(6)declare(同typeset)命令的语法

declare与typeset命令是bash的内置命令,二者命令的语法相同,用来声明shell变量,设置变量的属性。

常用命令参数:

  • -r:设置变量为只读
  • -i:设置变量为整数
  • -a:设置变量为数组array
  • -f:如果后面没有参数的话,会列出之前脚本定义的所有函数,如果有参数的话,列出以参数命名的函数
  • -x:设置变量在脚本外也可以使用

简单使用如下:

[[email protected] ~]# declare -i A=1 B=2
[[email protected] ~]# A=A+B
[[email protected] ~]# echo $A
3

(7)$[ ]符号的运算示例

[[email protected] ~]# echo $[1+2]
3
[[email protected] ~]# echo $[1*2]
2

(8)基于shell变量输入read命令的运算实践

shell脚本除了可以直接赋值或脚本传参外,还可以使用read命令从标准输入中获得,read为bash的

内置命令,而已通过help read查看帮助。

语法格式:read  [参数]  [变量名]

常用参数:

-p(prompt):设置提示信息

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

[[email protected] ~]# read -t 5 -p "Pls input one num:" num

==>此处的num为变量名,注意此处不需要加$符号,下面a、b同理。
Pls input one num:2
[[email protected] ~]# read -t 5 -p "Pls input two num:" a b      
Pls input two num:1 2



以上为本人在读《跟老男孩学Linux运维之shell编程实战》这本书时的笔记,如有任何版权问题,请联系留言。

时间: 2024-10-21 13:14:48

《跟老男孩学Linux运维之shell编程实战》-第四章 变量的数值计算的相关文章

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习<跟老男孩学Linux运维之shell编程实战>这本书时记录的知识点.看了这本书,我受益匪浅,当然这仅是我个人观点.下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个命令解释器,它的作用是解释执行用户输入的命令及程序等. shell脚本语言的种类:sh.ksh.bash.csh.tcsh,Linux中主流的shell是bash,所以本文及后续shell脚本以bash为主. 那我们如何查看Linux系统中默认的shell? [[email protected] ~

《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试

本文的知识点是关于shell脚本的条件测试的相关内容. 通常在shell脚本中我们需要做各式各样的条件判断,比如,测试一个文件是否存在.是否为文件或目录.是否 具有执行权限等等,所以在shell脚本中,条件判断还是至关重要的.接下来我们进入正题:shell脚本的条件测试. 1.在bash编程中,条件测试常用的语法形式如下表: 提示: 语法1中的test命令和语法2中的[]是等价的.语法3中的[[]]双中括号为扩展的test命令. 语法4中的(())常用于计算. 在双中括号[[]]中可以使用通配符

《跟老男孩学Linux运维之shell编程实战》-第三章 shell变量知识进阶

本文讲解shell变量知识进阶. 以下为知识点的总结,关于练习,本文不不涉及,还需要各位小伙伴自己练习! 1.shell中的特殊位置参数变量,请见下表: 在企业场景下,"$?"的用法: (1)判断命令.脚本或函数等程序是否执行成功: (2)若在脚本中调用执行"exit 数字",则会返回这个数字给"$?"变量: (3)如果是在函数里,则通过"return  数字",把这个数字以函数返回值的形式传给"$?".

跟老男孩学Linux运维:Web集群实战优惠预售中

跟老男孩学Linux运维:Web集群实战即将出版 感谢小伙们这么多年对老男孩的持续关注.支持和理解, 为此,我们特别组织预售活动,以网内最低价回馈小伙伴们, 为大家争取的特殊优惠加签名仅限前500名,优惠价预计7折左右! 还剩不到50个名额,大家抓紧了. 1.老男孩内部预售活动报名说明及缴费地址 http://www.huodongxing.com/event/8325097592500  2.京东商城预售地址: http://item.jd.com/11891124.html

跟老男孩学linux运维一书征求大家给建议选择!

跟老男孩学linux运维一书即将出版,征求下大家的建议和选择! 出版社的同学非常辛苦,现在出版社给我们设计了跟老男孩学linux运维一书封面 两个封面,大家觉得哪个好就评论下,一定要二选一啊! 选哪个,说下选择的理由,谢谢大家! 加入本书提供的两个QQ交流群226199808和339128815 (作者和读者交流答疑用) 届时可获得通过抽奖免费获得若干本新书的机会,. 封面1: 封面2:

Linux运维之Shell编程------(一)监控MySQL错误码及主从复制同步异常

Linux运维之Shell编程 一.监控MySQL错误码及主从复制同步异常 题目:监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:阶段1:开发一个守护进程脚本每30秒实现检测一次.阶段2:如果同步出现如下错误号(1158,1159,1008,1007,1062),则跳过错误.阶段3:请使用数组技术实现上述脚本(获取主从判断及错误号部分) 阶段2: #!/bin/bash#CONTACT='[email prote

提供跟老男孩学Linux运维Shell编程实战的第四、第五章源代码

第四章是讲Shell变量知识进阶与实践: 第五章是讲变量的数值计算实践: 附件中包括源码,请下载. 该两章在学习时要注意相关事项: 1.注意标点符号的使用:例如,单引号,反引号,双引号等: 2.注意该要留空格的留空格: 3.注意特殊变量的作用: 4.内置变量的使用: 5.算术运算任的使用.

《跟老男孩学Linux运维》

Linux 介绍 Linux 安装 Linux 调优 Web 基础 Nginx 应用 LNMP 应用 PHP 缓存加速 Nginx 调优 MySQL 应用 NFS 网络文件共享 Nginx 反向代理与负载均衡 Keepalived 高可用集群 Memcached 应用 Nagios 应用