第三十五篇 shell脚本编写常用的计算方法

心得:最近几天很充实,每天都在不断的学习一些新的东西,但久的东西也不能忘记,希望一点点的都记录下来。

  1. 字符串的拼接

拼接方法 ${key}加你想要拼接的字符

name=tian
echo $namejian
#什么都没有
echo ${
     name}jian
tianjian

2 函数返回值接收的两种方式
第一种通过echo来接收函数的返回值,并存储起来:

function func(){
     
	local value
	value=$[$1+$2]
	echo $value
}

res=$(func 2 3)
echo $res
结果:
tianjain@tianjain-TM1701:~$ ./func_args.sh 
5

第二种 通过return来接收函数返回值
一般只能接收数字返回值

function func(){
     
	local value  #定义局部变量
	value=$[$1*$2]
	return $value
}

func 2 3  #函数传递参数
echo $?  #立马用$?去读取函数存储的值,$?只能读取上一条指令是成功0还是失败1
echo $?

结果:

tianjain@tianjain-TM1701:~$ ./func_args.sh 
6  #函数返回值
0  #上一条echo命令执行成功

3 一次执行多条命令

tianjain@tianjain-TM1701:~$ cd /home/;ls;sleep 1;date
python  tianjain
20191127日 星期三 20:26:19 CST

4 expect脚本中变量的设定
expect中定义变量时可以通过这种方法

set time [exec date +%Y%m%d]

shell和expect结合的脚本中定义变量,直接定义在外部,内部可以直接使用

5 进制间的转换,位移
来说说我对进制的理解,进制是一种我们人为定义的数数的界限,二进制,逢2进1,从零开始的,十进制,逢十进一,十六进制,逢十六进一。

从十六进制来看:F
从十进制来看 :16
从八进制来看 :20
从二进制来看 :1111

写一位十六进制的数,需要四位二进制组成,一个32位的数据存储单元,只能写入8个十六进制数。每四位二进制数存储一位十六进制。这32位中,0 ~ 3表示第一个值,4~7表示第二个值,我们怎么去提取出与之对应的值呢。

tianjain@tianjain-TM1701:~$ echo $((0xFF))
255
#双括号的方法直接可以将十六进制转换为十进制数

echo “ibase=16;obase=2;3A”|bc

是用来转换进制的通用公式,ibase代表当前进制,obase代表你将要转的进制,3A是你当前的值,通过bc的方法。

进制中 0x00FF=0xFF 左边的零可以省略,右边的零不可以省
在32位中,我们要取0~7位的十进制数:

tianjain@tianjain-TM1701:~$ echo $((0xAB3456CA & 0xFF))
202

在32位中,我们要取出16~31位的十进制数,怎么去取呢:
16位二进制数,应该是4位十六进制数,在进制中,我们常常说的操作多少位,右移多少位,是针对二进制来运算的。

tianjain@tianjain-TM1701:~$ echo $((0xAB3456CA >>16 & 0xFFFF))
43828

6 shell中的数字计算方法总结

第一种 不能计算小数,出现小数时会将小数末尾去掉,造成数据差异过大
$(())

tianjain@tianjain-TM1701:~$ echo $((3-2))
1
tianjain@tianjain-TM1701:~$ echo $((3-2.1))
bash: 3-2.1: 语法错误: 无效的算术运算符 (错误符号是 ".1")

第二种 计算整数,也不能用小数
$[]

tianjain@tianjain-TM1701:~$ echo $[3-4]
-1
tianjain@tianjain-TM1701:~$ echo $[3.1-4]
bash: 3.1-4: 语法错误: 无效的算术运算符 (错误符号是 ".1-4")

第三种 可以计算小数,当小数为小于零时,0会消失,只会出现.2等数字,很尴尬
bc

tianjain@tianjain-TM1701:~$ echo 2.2+2 |bc
4.2
tianjain@tianjain-TM1701:~$ echo 2.2-2 |bc
.2

第四,第五种 都是来算整数的

tianjain@tianjain-TM1701:~$ let i=1+2
tianjain@tianjain-TM1701:~$ echo $i
3
tianjain@tianjain-TM1701:~$ expr 1 + 2
3
tianjain@tianjain-TM1701:~$ expr 1 + 2.2
expr: 非整数参数

第六种,非常赞的一种哦

真正的小数计算来了,那就是我们平常不知道的awk,很好奇吧,awk居然有计算的功能

tianjain@tianjain-TM1701:~$ echo | awk '{ print 1.3*4.3}'
5.59

看一个参数传递的

tianjain@tianjain-TM1701:~$ a=3
tianjain@tianjain-TM1701:~$ b=11
tianjain@tianjain-TM1701:~$ echo $a $b| awk '{ print $1/$2}'
0.272727

你可能感兴趣的:(shell,shell)