shell运算符及运算方法
概念
shell同其它编程语言一样,支持多种运算符。但是计算方式缺和其它编程语言不太一样,
运算符
算数运算符
+ 加法
- 减法
* 乘法
/ 除法
% 取余
= 赋值运算符
关系运算符
#[ condition ]的写法
-eq:equals,检测两个数是否相等,相等返回true
-ne: not equals,检测两个数是否不相等,不相等返回true
-gt:great than,检测左边的数是否大于右边的,如果是,则返回 true
-lt:less than,检测左边的数是否小于右边的,如果是,则返回 true。
-ge:great equals,检测左边的数是否大于等于右边的,如果是,则返回 true。
-le:less equals,检测左边的数是否小于等于右边的,如果是,则返回 true。
#[[ condition ]]的写法
==:相等,用于比较两个数字或字符串,相同则返回true
!=:不相等,用于比较两个数字,不相同则返回false
>:检测左边的数是否大于右边的,如果是,则返回 true
<:检测左边的数是否小于右边的,如果是,则返回 true。
>=:检测左边的数是否大于等于右边的,如果是,则返回 true。
<=:检测左边的数是否小于等于右边的,如果是,则返回 true。
逻辑判断运算符
#[ condition ]的写法
!:非运算,表达式为true则返回false,否则返回true
-o:或运算,有一个表达式为true则返回true
-a:与运算,两个表达式都为true才返回true
#[[ condition ]]的写法
!:非运算,表达式为true则返回false,否则返回true
||:或运算,有一个表达式为true则返回true
&&:与运算,两个表达式都为true才返回true
自增自减运算符
i++:自增1
i--:自减1
文件测试运算符
文件测试运算符用于检测 Unix 文件的各种属性。
-d file:检测文件是否是目录,如果是,则返回 true。
-f file:检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-r file:检测文件是否可读,如果是,则返回 true。
-w file:检测文件是否可写,如果是,则返回 true。
-x file:检测文件是否可执行,如果是,则返回 true。
-e file:检测文件(包括目录)是否存在,如果是,则返回 true。
-L file:检测文件是否为软连接,如果是,则返回true。
-b file:检测文件是否是块设备文件,如果是,则返回 true。
-c file:检测文件是否是字符设备文件,如果是,则返回 true。
-g file:检测文件是否设置了 SGID 位,如果是,则返回 true。
-k file:检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p file:检测文件是否是有名管道,如果是,则返回 true。
-u file:检测文件是否设置了 SUID 位,如果是,则返回 true。
-s file:检测文件是否为空(文件大小是否大于0),不为空返回 true。
使用运算方法进行算数运算
使用awk进行算数运算
大多数情况都可以使用awk进行算数运算,awk可以进行整数、小数的运算
基础用法示例:
root@master:~$ awk 'BEGIN{print 1/3}'
0.333333
root@master:~$ awk 'BEGIN{print 2*3}'
6
root@master:~$ awk 'BEGIN{print 3+3}'
6
root@master:~$ awk 'BEGIN{print 4-3}'
1
携带变量示例
awk -v选项用于创建或修改awk中的变量,-v是shell脚本与awk的桥梁
在awk中各种变量直接使用即可,不要加上$,如果加上了会被awk认为是取列
root@master:~$ num1=2
root@master:~$ num2=5
root@master:~$ awk -va1=${num1} -va2=${num2} 'BEGIN{print a1/a2}'
0.4
root@master:~$ awk -va1=${num1} -va2=${num2} 'BEGIN{print a1*a2}'
10
root@master:~$ awk -va1=${num1} -va2=${num2} 'BEGIN{print a1+a2}'
7
root@master:~$ awk -va1=${num1} -va2=${num2} 'BEGIN{print a1-a2}'
-3
使用expr进行算数运算
expr命令只能用来进行整数运算,而不能计算小数,在现代脚本中不如 let 、 $(( ))、awk 常用。
使用注意事项
-
需要使用空格
-
对*号进行转义
\* -
expr进行计算的时候结果为0,
$?的返回值就是1,其它时候$?的返回值是0
示例:
#没有空格会直接输出原样
huangxin@master:~$ expr 1+1
1+1
huangxin@master:~$ expr 1 + 1
2
huangxin@master:~$ expr 1 - 1
0
#当计算结果为0时,$?的结果为1
huangxin@master:~$ echo $?
1
huangxin@master:~$ expr 2 \* 2
4
#乘法运算,不进行转义会报错
huangxin@master:~$ expr 2 * 2
expr: syntax error: unexpected argument ‘base64’
huangxin@master:~$ expr 2 / 2
1
huangxin@master:~$ echo $?
0
使用let进行运算
let也是进行整数的运算,不涉及小数,自增自减也是使用let运算符
示例:
huangxin@master:~$ let 1+1
huangxin@master:~$ echo $?
0
huangxin@master:~$ let num=1+1
huangxin@master:~$ echo $num
2
huangxin@master:~$ let num++
huangxin@master:~$ echo $num
3
huangxin@master:~$ let num=2*2
huangxin@master:~$ echo $num
4
使用$(())进行运算
$(())也是只能进行整数的运算
示例:
huangxin@master:~$ echo $((1*1))
1
huangxin@master:~$ echo $((1+1))
2
huangxin@master:~$ echo $((1-1))
0
huangxin@master:~$ echo $((1/1))
1
本文来自博客园,作者:huangSir-devops,转载请注明原文链接:https://www.cnblogs.com/huangSir-devops/p/18816711,微信Vac6666666,欢迎交流

浙公网安备 33010602011771号