码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2017-04-21 14:57:05      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:shell 变量 数值计算

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

1.常见的算术运算符:

技术分享

提示:

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

[root@www ~]# a=10                  ==>定义变量a
[root@www ~]# echo $((a++))   

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

[root@www ~]# echo $((a--))         

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

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

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

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

9
[root@www ~]# echo $((++a))    

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

10
[root@www ~]# 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中可包含变量

例如:

[root@www ~]# expr 1 + 1
2
[root@www ~]# expr 1 \* 1
1

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

  • 运算符及用于计算的数字左右都至少有一个空格,否则会报错。

  • 使用乘号时,必须用反斜线进行转义。

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

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

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

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

expr match $string  substring

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

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

举例说明:

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

[root@www 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

[root@www scripts]# sh expr.sh qq.pub
you are using qq.pub
[root@www scripts]# sh expr.sh qq
pls use *.pub file

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

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

(4)bc命令的用法

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

使用方法如下:

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

(5)awk实现计算

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

示例如下:

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

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

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

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

常用命令参数:

  • -r:设置变量为只读

  • -i:设置变量为整数

  • -a:设置变量为数组array

  • -f:如果后面没有参数的话,会列出之前脚本定义的所有函数,如果有参数的话,列出以参数命名的函数

  • -x:设置变量在脚本外也可以使用

简单使用如下:

[root@www ~]# declare -i A=1 B=2
[root@www ~]# A=A+B
[root@www ~]# echo $A
3

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

[root@www ~]# echo $[1+2]
3
[root@www ~]# echo $[1*2]
2

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

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

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

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

常用参数:

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

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

[root@www ~]# read -t 5 -p "Pls input one num:" num  

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





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


本文出自 “shayatou_1990” 博客,请务必保留此出处http://shayatou1990.blog.51cto.com/12806916/1918020

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

标签:shell 变量 数值计算

原文地址:http://shayatou1990.blog.51cto.com/12806916/1918020

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!