Linux 各种运算符
Posted 刘合栋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 各种运算符相关的知识,希望对你有一定的参考价值。
- 算术运算符
算术运算符,常用的有+
、-
、*
、/
、%
、++
、--
、**
+
- 加法运算符[[email protected] ~]$ expr 1 + 1 2 [[email protected] ~]$ echo $(( 1 + 1 )) 2
-
- 减法运算符[[email protected] ~]$ expr 1 - 1 0 [[email protected] ~]$ echo $(( 1 - 1 )) 0
*
- 乘法运算符[[email protected] ~]$ expr 2 * 2 4 [[email protected] ~]$ echo $(( 2 * 2 ))
/
- 除法运算符[[email protected] ~]$ expr 2 / 2 1 [[email protected] ~]$ echo $(( 2 / 2 )) 1
%
- 取余运算符[[email protected] ~]$ expr 2 % 2 0 [[email protected] ~]$ echo $(( 10 % 2 )) 0
**
- 幂运算符[[email protected] ~]$ echo $(( 2 ** 4 )) 16
++
- 增加运算符[[email protected] ~]$ variable=0 [[email protected] ~]$ (( variable++ )) [[email protected] ~]$ echo $variable 1 #------------------------------------- [[email protected] ~]$ variable=0 [[email protected] ~]$ let variable++ [[email protected] ~]$ echo $variable 1
--
- 减少运算符[[email protected] ~]$ variable=100 [[email protected] ~]$ (( variable-- )) [[email protected] ~]$ echo $variable 99 #------------------------------------ [[email protected] ~]$ variable=100 [[email protected] ~]$ let variable-- [[email protected] ~]$ echo $variable 99
- 关系运算符
关系运算符,常用的有<
、<=
、>
、>=
、=
、==
、!=
<
- 小于运算符[[email protected] ~]$ echo $(( 1 < 2 )) 1 # 返回值为0表示(false),返回值为1表示(true) [[email protected] ~]$ (( 1 < 2 ));echo $? 0 # 返回值为0表示(tree),返回值为1表示(false) [[email protected] ~]$ [[ 1 < 2 ]];echo $? 0 # 返回值为0表示(true),返回值为1表示(false)
<=
- 小于或等于运算符[[email protected] ~]$ echo $(( 1 <= 2 )) 1 # 返回值为0表示(false),返回值为1表示(true) [[email protected] ~]$ (( 1 < 2 ));echo $? 0 # 返回值为0表示(tree),返回值为1表示(false)
>
- 大于运算符[[email protected] ~]$ echo $((1 > 2)) 1 # 返回值为0表示(false),返回值为1表示(true) [[email protected] ~]$ ((1 > 2));echo $? 0 # 返回值为0表示(tree),返回值为1表示(false) [[email protected] ~]$ [[ 1 > 2 ]];echo $? 0 # 返回值为0表示(true),返回值为1表示(false)
>=
- 大于或等于运算符[[email protected] ~]$ echo $((1 >= 2)) 1 # 返回值为0表示(false),返回值为1表示(true) [[email protected] ~]$ ((1 >= 2));echo $? 0 # 返回值为0表示(tree),返回值为1表示(false)
=
- 等于运算符[[email protected] ~]$ [ "word" = "word" ];echo $? # 该行为是进行字符串比较 [[email protected] ~]$ [[ "word" = "word" ]];echo $? # 该行为是进行字符串比较
==
- 等于运算符[[email protected] ~]$ expr 1 == 1 1 # 返回值为0表示(false),返回值为1表示(true) [[email protected] ~]$ echo $((1 == 1)) 1 # 返回值为0表示(false),返回值为1表示(true) [[email protected] ~]$ ((1 == 1));echo $? 0 # 返回值为0表示(true),返回值为1表示(false) [[email protected] ~]$ [[ 1 == 1 ]];echo $? 0 # 返回值为0表示(true),返回值为1表示(false)
!=
- 不等于运算符[[email protected] ~]$ expr 1 != 1 0 # 返回值为0表示(false),返回值为1表示(true) [[email protected] ~]$ echo $((1 != 1)) 0 # 返回值为0表示(false),返回值为1表示(true) [[email protected] ~]$ ((1 != 1));echo $? 1 # 返回值为0表示(true),返回值为1表示(false) [[email protected] ~]$ [[ 1 != 1 ]];echo $? 1 # 返回值为0表示(true),返回值为1表示(false)
- 逻辑运算符
逻辑运算符,常用的有&&
、||
、!
&&
- 逻辑与运算符[[email protected] ~]$ make && make install # 只有当make命令成功执行时,才会执行后面的语句 [[email protected] ~]$ [ -f /etc/passwd -a -d /etc ];echo $? # -a 等同于 &&
||
- 逻辑或运算符[[email protected] ~]$ make || echo "Make failed !" # 当make执行失败时,才会执行后面的语句 [[email protected] ~]$ [ -f /etc/passwd -o -d /etc];echo $? # -o 等同于 ||
!
- 逻辑非运算符[[email protected] ~]$ [ 1 -eq 1 ];echo $? 0 [[email protected] ~]$ [ ! 1 -eq 1 ];echo $? 1 # !真 = 假 , !假 = 真 # 也就是将结果取反,如果表达式为0则返回1,为1则返回0、
- 按位运算符
按位运算符,常用的有&
、|
、^
、~
、<<
、>>
、
&
- 按位与运算符[[email protected] ~]$ echo $((0 & 0)) 0 [[email protected] ~]$ echo $((0 & 1)) 0 [[email protected] ~]$ echo $((1 & 0)) 0 [[email protected] ~]$ echo $((1 & 1)) 1 # 由此得出,只有当两边的值都为true时,结果才为true
|
- 按位或运算符[[email protected] ~]$ echo $(( 0 | 0 )) 0 [[email protected] ~]$ echo $(( 0 | 1 )) 1 [[email protected] ~]$ echo $(( 1 | 0 )) 1 [[email protected] ~]$ echo $(( 1 | 1 )) 1 # 由此得出,只要有一个值为true,则结果为true
^
- 异或运算符[[email protected] ~]$ echo $(( 0 ^ 0 )) 0 [[email protected] ~]$ echo $(( 0 ^ 1 )) 1 [[email protected] ~]$ echo $(( 1 ^ 0 )) 1 [[email protected] ~]$ echo $(( 1 ^ 1 )) 0 #----------------------------------------------- # 异或是运算二进制,两个值进行运算,同号为0,异号为1,例如: [[email protected] ~]$ echo $((99^88)) # 开始运算,异或后为59,为什么? 59 # 这里为运算的过程,99和88进行异或,如果两个都是一样的就是0,不一样就是1 [[email protected] ~]$ echo "obase=2;ibase=10;99"|bc # 得出99的二进制 1011000 [[email protected] ~]$ echo "obase=2;ibase=10;88"|bc # 得出88的二进制 1100011 # 99 = 1011000 # 88 = 1100011 # 59 = 0111011 # 此处为上面两个二进制运算后的结果, [[email protected] ~]$ echo "obase=10;ibase=2;0111011"|bc 59 # 最终结果是正确的,常用于互换两个变量的值,但该值一定是整数
~
- 取反运算符[[email protected] ~]$ echo $(( ~9 ))
<<
- 左移运算符[[email protected] ~]$ echo $((1<<2))
>>
- 右移运算符[[email protected] ~]$ echo $((2>>1))
- 文件测试符
文件测试有很多,如下:
-n
- 检测字符长度是否为0,不为0则返回true
-z
- 检测字符长度是否为0,为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
- 判断文件是否存在,并且具备执行权限
以上是关于Linux 各种运算符的主要内容,如果未能解决你的问题,请参考以下文章