shell系统学习(1)--文件判断,字符串,数字比较

 

1.文件判断

shell中有专门对文件的状态属性进行判断的测试运算符,主要有以下几个

[ -a FILE ] 如果 FILE 存在则为真。

[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。

[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。

[ -d FILE ] 如果 FILE 存在且是一个目录则为真。

[ -e FILE ] 如果 FILE 存在则为真。

[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。

[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。

[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。

[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。

[ -p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。

[ -r FILE ] 如果 FILE 存在且是可读的则为真。

[ -s FILE ] 如果 FILE 存在且大小不为0则为真。

[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。

[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。

[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。

[ -x FILE ] 如果 FILE 存在且是可执行的则为真。

[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。

[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。

[ -L FILE ] 如果 FILE 存在且是一个符号连接则为真。

[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read则为真。

[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。

[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真。

[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真。

[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。

 

常用的参数:

 

 

案例:

[root@linuxnode1 ~]# [ -f red.sh1 ] && echo 1 || echo 0
0
[root@linuxnode1 ~]# [ -f deploy ] && echo 1 || echo 0       
1
[root@linuxnode1 ~]# [ -d deploy ] && echo 1 || echo 0
0
[root@linuxnode1 ~]# [ -x deploy ] && echo 1 || echo 0
0
[root@linuxnode1 ~]# [ -x input.sh ] && echo 1 || echo 0      
1
[root@linuxnode1 ~]# [ -s input.sh ] && echo 1 || echo 0
1
[root@linuxnode1 ~]# [ -e input.sh ] && echo 1 || echo 0
1
[root@linuxnode1 ~]# [ ! -s input.sh ] && echo 1 || echo 0    
0

 

2、整数值比较

[ num1 选项 num2 ]

例如:[ 2 -eq 2 ] 或者用变量[ $a -eq $b ]

(1) -eq 等于

(2) -ne 不等于

(3) -gt 大于

(4) -ge 大于等于

(5) -lt 小于

(6) -le 小于等于

例:

[root@linuxnode1 ~]# [ 1 -eq 2 ]&& echo 1 || echo 0
0
[root@linuxnode1 ~]# [ 1 -eq 1 ]&& echo 1 || echo 0
1
[root@linuxnode1 ~]# [ 1 -lt 1 ]&& echo 1 || echo 0  
0
[root@linuxnode1 ~]# [ 1 -le 1 ]&& echo 1 || echo 0
1

用(()) [[]]测试
[root@linuxnode1 ~]# (( 3 >2 ))&& echo 1 || echo 0         
1
[root@linuxnode1 ~]# (( 3 <2 ))&& echo 1 || echo 0
0
[root@linuxnode1 ~]# [[ 3 <2 ]]&& echo 1 || echo 0 

 

 

 

 

3、字符比较

[ "string字串1" 选项 "string字串2" ]

例如:[ $name == "jim" ]

注意:选项和字串两边有空格!!!!字符一定用双引号引住。

(1) == 相等 相等为真

(2) != 不相等 不相等为真 0

(3) -z 空 空为真

(4) !-z 非空 非空为真

例:

[root@linuxnode1 ~]# [ "abc" == "bcd" ]&& echo 1 || echo 0
0
[root@linuxnode1 ~]# [ "abc" != "bcd" ]&& echo 1 || echo 0
1
[root@linuxnode1 ~]# [ -z "bcd" ]&& echo 1 || echo 0        
0
[root@linuxnode1 ~]# [ ! -z "bcd" ]&& echo 1 || echo 0
1
[root@linuxnode1 ~]# [ -n "bcd" ]&& echo 1 || echo 0   
1

 

 

4、逻辑判断:(两个或两个以上判断条件时使用逻辑比较)

(1) 逻辑 与:

&& 多个条件同时成立 [条件1] && [条件2]

(2) 逻辑 或:

|| 多个条件只要有一个条件成了就可以 [条件1] || [条件2]

(3) 逻辑 非 !=取反

PS:两种表达方式:

1. &&----[ 10 -gt 8 ] && [ 5 -lt 6 ]        2. -a 用法:[ 10 -gt 8 -a 5 -lt 6 ]

1. ||    ----[ 10 -gt 8 ] || [ 5 -lt 6 ]               2. -o 用法:[ 10 -gt 8 -0 5 -lt 6 ]

(4) 调用变量时"" 与''的区别

字符用两个都一样输出,当变量时,单引号输出字符,双引号 使用变量的功能

例如:a =10 b=10

"$a + $b"=num2 结果是 10 + 10 =num2

'$a + $b'=num2 结果是 $a + $b =num2

 

例:

[root@linuxnode1 ~]# [ -n "bcd" -a -f test1.yaml ]&& echo 1 || echo 0        
1
[root@linuxnode1 ~]# [ -n "bcd" -a -f test3.yaml ]&& echo 1 || echo 0
0
[root@linuxnode1 ~]# [ -n "bcd" -o -f test3.yaml ]&& echo 1 || echo 0
1

 

posted @ 2020-06-23 11:05  wxhw7021234  阅读(164)  评论(0编辑  收藏  举报