shell 里面的计算
---恢复内容开始---
关于shell里面的计算其实早在接触LINUX的时候就已经接触到了。每次在运用的时候却是在网上到处找,所以觉得花点时间好好研究下。
首先了解下常用的算数运算符号:
+ - |
加法(正号),减法(负号) |
* / % |
乘法,除法,取余 |
** |
幂运算 |
++ -- |
增加或者减少,可前置也可放在变量结尾 |
! && || |
逻辑非(取反)。逻辑与(and),逻辑或(or) |
< <= > >= |
小于,小于等于 大于 大于等于 |
== != = |
比较符号(相等。不相等。 对于字符串=也是等于号) |
<< >> |
向左移位,向右移位 |
~ | & ^ |
安位取反 按位异或 按位与 按位或 |
= += -= *= /= %= |
赋值运算符例如 a+=1 就是a=a+1
|
常用的算数运算命令如下
运算操作与运算命令 |
意义 |
(()) |
用于证书运算的常用运算符,效率很高 |
let |
用于证书运算,类似于‘(())’ |
expr |
可用于整数运算,但还有很多其他额外的功能 |
bc |
Linux下的一个运算程序(数和证书和小数运算) |
$[] |
用于整数运算 |
awk |
awk既可以用于证书运算,也可以用于小数运算 |
declare |
定义变量和属性,-i参数可以用于定义整形变量,做运算/ |
一:双小括号的运算实践
1.1
利用(())进行简单的计算((i=i+1))表示把i+1的结果赋给i,但是如果要引用结果的话,不知能echo ((i=1+1))必须要加上$符号 echo $((i=1+1))
1.2 利用(())双括号进行比较以及判断
这里的 1 表示真,0表示假可以和逻辑运算一起。
注意:上面涉及的数字以及变量必须为整数(整形),不能是小数或者字符串
1.3 --,++的用法
举个最简单的例子:
++a表示输出计算后的数,a++表示输出的是a的值
1.4 (())的赋值运算
这里需要注意的是 (())里面引用变量可以不加$ (当然也可以加,我习惯加)
(())里面所有字符之间没有空格,有一个或者多个不会影响结果。let命令和(())功能相同但是效率较低这里就不说了
二 expr命令的用法
expr既可以用于整数计算,也可以用于字符串的长度,匹配的运算处理。
2.1用于计算
2.2 用于字符串,expr判断字符串是否是整数。由于函数库比较少,所以判断字符串是否为整数是一个比较难的事情。实现原理,比一个字符串和1相加,查看返回值,如果返回值是0,那么这个数就是整数
注意,使用expr 后面计算符号前后必须有空格!!
也可以使用match来匹配如下:
expr的特殊用法,判断文件名是否满足要求!
计算字符串的长度
AWK 实现计算!
用awk实现计算的一个非常好的方法,特别是小数
我们上面的都是直接用$i 来引用,也可以用declare(同typeset)来定义 然后直接使用
这样用的比较少
$[]符号的运算
以上就是我们常用的运算!!下面有几个实例
写一个脚本,完成输入两个数,判断这两个数是否为整数,如果是整数,完成相加并且输出结果,如果不是则给出相应的提示
#!/bin/bash read -t 15 -p "please input two num:" a b [ ${#a} -le 0 ] && { echo "the first num is null exit 1"} [ ${#b} -le 0 ] && { echo "the secound num is null exit 1"} expr $a + 1 &> /dev/null RETVAL_A=$? expr $b + 1 &> /dev/null RETVAL_B=$? if [ $RETVAL_A -ne 0 -o $RETVAL_B -ne 0 ] ;then echo "one of the num is not num ,pls input again" exit 1 fi
---恢复内容结束---