算术运算符,常用的有+、-、*、/、%、++、--、**
+ - 加法运算符
[root@www ~]$ expr 1 + 1
2
[root@www ~]$ echo $(( 1 + 1 ))
2- - 减法运算符
[root@www ~]$ expr 1 - 1
0
[root@www ~]$ echo $(( 1 - 1 ))
0* - 乘法运算符
[root@www ~]$ expr 2 \* 2
4
[root@www ~]$ echo $(( 2 * 2 ))/ - 除法运算符
[root@www ~]$ expr 2 \/ 2
1
[root@www ~]$ echo $(( 2 / 2 ))
1% - 取余运算符
[root@www ~]$ expr 2 % 2
0
[root@www ~]$ echo $(( 10 % 2 ))
0** - 幂运算符
[root@www ~]$ echo $(( 2 ** 4 ))
16++ - 增加运算符
[root@www ~]$ variable=0
[root@www ~]$ (( variable++ ))
[root@www ~]$ echo $variable
1
#-------------------------------------
[root@www ~]$ variable=0
[root@www ~]$ let variable++
[root@www ~]$ echo $variable
1-- - 减少运算符
[root@www ~]$ variable=100
[root@www ~]$ (( variable-- ))
[root@www ~]$ echo $variable
99
#------------------------------------
[root@www ~]$ variable=100
[root@www ~]$ let variable--
[root@www ~]$ echo $variable
99关系运算符,常用的有<、<=、>、>=、=、==、!=
< - 小于运算符
[root@www ~]$ echo $(( 1 < 2 ))
1 # 返回值为0表示(false),返回值为1表示(true)
[root@www ~]$ (( 1 < 2 ));echo $?
0 # 返回值为0表示(tree),返回值为1表示(false)
[root@www ~]$ [[ 1 < 2 ]];echo $?
0 # 返回值为0表示(true),返回值为1表示(false)
<= - 小于或等于运算符
[root@www ~]$ echo $(( 1 <= 2 ))
1 # 返回值为0表示(false),返回值为1表示(true)
[root@www ~]$ (( 1 < 2 ));echo $?
0 # 返回值为0表示(tree),返回值为1表示(false)> - 大于运算符
[root@www ~]$ echo $((1 > 2))
1 # 返回值为0表示(false),返回值为1表示(true)
[root@www ~]$ ((1 > 2));echo $?
0 # 返回值为0表示(tree),返回值为1表示(false)
[root@www ~]$ [[ 1 > 2 ]];echo $?
0 # 返回值为0表示(true),返回值为1表示(false)>= - 大于或等于运算符
[root@www ~]$ echo $((1 >= 2))
1 # 返回值为0表示(false),返回值为1表示(true)
[root@www ~]$ ((1 >= 2));echo $?
0 # 返回值为0表示(tree),返回值为1表示(false)= - 等于运算符
[root@www ~]$ [ "word" = "word" ];echo $?
# 该行为是进行字符串比较
[root@www ~]$ [[ "word" = "word" ]];echo $?
# 该行为是进行字符串比较== - 等于运算符
[root@www ~]$ expr 1 == 1
1 # 返回值为0表示(false),返回值为1表示(true)
[root@www ~]$ echo $((1 == 1))
1 # 返回值为0表示(false),返回值为1表示(true)
[root@www ~]$ ((1 == 1));echo $?
0 # 返回值为0表示(true),返回值为1表示(false)
[root@www ~]$ [[ 1 == 1 ]];echo $?
0 # 返回值为0表示(true),返回值为1表示(false)!= - 不等于运算符
[root@www ~]$ expr 1 != 1
0 # 返回值为0表示(false),返回值为1表示(true)
[root@www ~]$ echo $((1 != 1))
0 # 返回值为0表示(false),返回值为1表示(true)
[root@www ~]$ ((1 != 1));echo $?
1 # 返回值为0表示(true),返回值为1表示(false)
[root@www ~]$ [[ 1 != 1 ]];echo $?
1 # 返回值为0表示(true),返回值为1表示(false)逻辑运算符,常用的有&&、||、!
&& - 逻辑与运算符
[root@www ~]$ make && make install
# 只有当make命令成功执行时,才会执行后面的语句
[root@www ~]$ [ -f /etc/passwd -a -d /etc ];echo $?
# -a 等同于 &&|| - 逻辑或运算符
[root@www ~]$ make || echo "Make failed !"
# 当make执行失败时,才会执行后面的语句
[root@www ~]$ [ -f /etc/passwd -o -d /etc];echo $?
# -o 等同于 ||! - 逻辑非运算符
[root@www ~]$ [ 1 -eq 1 ];echo $?
0
[root@www ~]$ [ ! 1 -eq 1 ];echo $?
1
# !真 = 假 , !假 = 真
# 也就是将结果取反,如果表达式为0则返回1,为1则返回0、按位运算符,常用的有&、|、^、~、<<、>>、
& - 按位与运算符
[root@www ~]$ echo $((0 & 0))
0
[root@www ~]$ echo $((0 & 1))
0
[root@www ~]$ echo $((1 & 0))
0
[root@www ~]$ echo $((1 & 1))
1
# 由此得出,只有当两边的值都为true时,结果才为true| - 按位或运算符
[root@www ~]$ echo $(( 0 | 0 ))
0
[root@www ~]$ echo $(( 0 | 1 ))
1
[root@www ~]$ echo $(( 1 | 0 ))
1
[root@www ~]$ echo $(( 1 | 1 ))
1
# 由此得出,只要有一个值为true,则结果为true^ - 异或运算符
[root@www ~]$ echo $(( 0 ^ 0 ))
0
[root@www ~]$ echo $(( 0 ^ 1 ))
1
[root@www ~]$ echo $(( 1 ^ 0 ))
1
[root@www ~]$ echo $(( 1 ^ 1 ))
0
#-----------------------------------------------
# 异或是运算二进制,两个值进行运算,同号为0,异号为1,例如:
[root@www ~]$ echo $((99^88)) # 开始运算,异或后为59,为什么?
59
# 这里为运算的过程,99和88进行异或,如果两个都是一样的就是0,不一样就是1
[root@www ~]$ echo "obase=2;ibase=10;99"|bc # 得出99的二进制
1011000
[root@www ~]$ echo "obase=2;ibase=10;88"|bc # 得出88的二进制
1100011
# 99 = 1011000
# 88 = 1100011
# 59 = 0111011 # 此处为上面两个二进制运算后的结果,
[root@www ~]$ echo "obase=10;ibase=2;0111011"|bc
59
# 最终结果是正确的,常用于互换两个变量的值,但该值一定是整数~ - 取反运算符
[root@www ~]$ echo $(( ~9 ))<< - 左移运算符
[root@www ~]$ echo $((1<<2))>> - 右移运算符
[root@www ~]$ echo $((2>>1))文件测试有很多,如下:
-z - 检测字符长度为0,则返回true
-eq - 等于
-ge - 大于等于
-gt - 大于
-le - 小于等于
-lt - 小于
-ne - 不等于
-ef - 判断 file1 和 file2 是否具有相同的设备和inode编号
-nt - 判断 file和 file2 哪一个文件比较新
-ot - 判断 file和 file2 哪一个文件比较旧
-b - 判断文件是否存在,并且是块设备文件
-c - 判断文件是否存在,并且是字符设备文件
-d - 判断文件是否存在,并且是目录
-e - 判断文件是否存在
-f - 判断文件是否存在,并且是普通文件
-g - 判断文件是否存在,并且设置了SGID位
-G - 判断文件是否存在,并且GID有效
-h - 判断文件是否存在,并且是一个符号链接(与-L相同)
-k - 判断文件是否存在,并且设置了粘着位
-L - 判断文件是否存在,并且是一个符号链接(与-h相同)
-O - 判断文件是否存在,并且UID有效
-p - 检测文件是否存在,并且具备命名管道
-r - 判断文件是否存在,并且具备读权限
-s - 判断文件是否存在,并且大小大于0
-S - 判断文件是否存在,并且是一个套接字
-t - 文件描述符是在一个终端打开的
-u - 判断文件是否存在,并且设置了SUID位
-w - 判断文件是否存在,并且具备写权限
-x - 判断文件是否存在,并且具备执行权限
原文:https://www.cnblogs.com/liuhedong/p/10356155.html