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
posted @ 2025-04-09 15:21  huangSir-devops  阅读(85)  评论(0)    收藏  举报
作者:你的名字
出处:你的博客链接
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。