算数运算符
运算符
● +
● -
● *
● /
● %
1 2 3 4 5 6 7 8 |
# 浮点运算 bc # 整数运算 expr $(()) $[] let |
1、bc是比较常用的linux计算工具了,而且支持浮点运算
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@lb01 ~]# res=`echo 1.2+1.3|bc` [root@lb01 ~]# echo $res 2.5 [root@lb01 ~]# res=`echo 10 % 3 | bc` [root@lb01 ~]# echo $res 1 #scale=2取小数点后两位 [root@lb01 ~]# res=`echo "scale=2;5.0/6.0"|bc` [root@lb01 ~]# echo $res .83 |
2、expr不支持浮点数计算。而且要注意数字与运算符中的空格
1 2 3 |
[root@lb01 ~]# res=`expr 5 / 3` [root@lb01 ~]# echo $res 1 |
3、$(()) 同expr,不支持浮点数运算
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@lb01 ~]# x=1 [root@lb01 ~]# y=2 [root@lb01 ~]# echo $(( $x + $y )) 3 [root@lb01 ~]# echo $(( 1 + 2 )) 3 # 注意: echo $(( $num1 + $num2 )) # 也可以简写为 echo $(( num1 + num2 )) echo $((( 5 - 3 ) * 2 )) # 可以嵌套括号 |
4、$[]同expr以及$(()),不支持浮点运算
1 2 3 4 5 6 7 |
[root@lb01 ~]# x=1 [root@lb01 ~]# y=2 [root@lb01 ~]# echo $[ $x + $y ] 3 [root@lb01 ~]# echo $[( 5 - 3 ) * 2] 4 |
5、let 不支持浮点数运算,而且不支持直接输出,只能赋值
1 2 3 4 5 6 7 |
[root@lb01 ~]# let res=1+1 [root@lb01 ~]# echo $res 2 [root@lb01 ~]# let res=50/5 [root@lb01 ~]# echo $res 10 |
测试运算符
判断文件类型
判断参数 | 含义 |
---|---|
-e | 判断文件是否存在(任何类型文件) |
-f | 判断文件是否存在==并且==是一个普通文件 |
-d | 判断文件是否存在并且是一个目录 |
-L | 判断文件是否存在并且是一个软连接文件 |
-b | 判断文件是否存在并且是一个块设备文件 |
-S | 判断文件是否存在并且是一个套接字文件 |
-c | 判断文件是否存在并且是一个字符设备文件 |
-p | 判断文件是否存在并且是一个命名管道文件 |
-s | 判断文件是否存在并且是一个非空文件(有内容) |
判断文件权限
判断参数 | 含义 |
---|---|
-r | 当前用户对其是否可读 |
-w | 当前用户对其是否可写 |
-x | 当前用户对其是否可执行 |
-u | 是否有suid,高级权限冒险位 |
-g | 是否sgid,高级权限强制位 |
-k | 是否有t位,高级权限粘滞位 |
举例
-d 目录
1 |
[root@lb01 ~]# test -d /etc/ ; echo $? 0 |
-s 文件长度 > 0、非空
1 2 3 |
[root@lb01 ~]# touch a.txt [root@lb01 ~]# test -s a.txt ;echo $? # 文件为空则返回假 1 |
-f 正规文件
1 2 |
[root@lb01 ~]# test -f /etc/passwd;echo $? 0 |
-w 可写
1 2 |
[egon@lb01 ~]$ [ -w a.txt ];echo $? # 返回假,注意,如果是root用户,无论如何都有 写权限 1 |
-r 可读
1 2 3 4 |
[egon@lb01 ~]$ ll a.txt -r--r--r--. 1 egon egon 292 8月 17 21:48 a.txt [egon@lb01 ~]$ test -r a.txt;echo $? 0 |
-x 可执行
1 2 3 4 |
[egon@lb01 ~]$ ll a.txt -r--r--r--. 1 egon egon 292 8月 17 21:48 a.txt [egon@lb01 ~]$ test -x a.txt;echo $? 1 |
-L 符号连接
1 2 3 4 |
[root@lb01 ~]# ll -d /lib64 lrwxrwxrwx. 1 root root 9 7月 14 03:33 /lib64 -> usr/lib64 [root@lb01 ~]# test -L /lib64;echo $? 0 |
-u 文件有 suid 位设置
1 2 3 4 5 6 |
[root@lb01 ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd [root@lb01 ~]# [ -u `which passwd` ];echo $? 0 [root@lb01 ~]# [ -u `which ls` ];echo $? 1 |
测试数值
判断参数 | 含义 |
---|---|
-eq | 相等 |
-ne | 不等 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
补充
[[]]与[]基本一样,不同的是[[]]支持正则匹配,不过要注意的是必须在内层中括号内左右两侧加空格
1 2 |
[root@egon ~]# [[ "$USER" == "root" ]];echo $? # 注意内层[]中包含的内容必须左右两侧加空格 0 |
补充浮点数的比较
1 2 3 4 5 6 7 |
# 需要注意的是:bc的结果为1代表真,为0代表假 [root@egon ~]# echo "10.3 >= 10.1" | bc 1 [root@egon ~]# echo "10.3 != 10.1" | bc 1 [root@egon ~]# echo "10.3 != 10.3" | bc 0 |