linux脚本一致性判断,Linux Shell编程(7) - 流程控制语句(一)条件判断式语句...

一、两种判断格式

test 判断式

[ 判断式 ] (常用)

二、按照文件类型进行判断

测试选项

作用

-b 文件

判断该文件是否存在,并且是块设备文件

-c 文件

判断该文件是否存在,并且是字符设备文件

-d 文件

判断该文件是否存在,并且是目录

-e 文件

判断该文件是否存在

-f 文件

判断该文件是否存在,并且是普通文件

-L 文件

判断该文件是否存在,并且是符号链接文件

-p 文件

判断该文件是否存在,并且是管道文件

-s 文件

判断该文件是否存在,并且非空

-S 文件

判断该文件是否存在,并且是套接字文件

1. 利用 $? 判断文件是否存在

[root/tmp]# [ -e /etc/passwd ]

[root/tmp]# echo $?

0

[root/tmp]# [ -e /etc/passwds ]

[root/tmp]# echo $?

1

2. 利用 && 和 || 判断文件是否是目录

[root/tmp]# [ -d /etc/passwd ] && echo 'yes' || echo 'no'

no

[root/tmp]# [ -d /etc/ ] && echo 'yes' || echo 'no'

yes

三、按照文件权限进行判断

测试选项

作用

-r 文件

判断该文件是否存在,并且当前用户拥有读权限

-w 文件

判断该文件是否存在,并且当前用户拥有写权限

-x 文件

判断该文件是否存在,并且当前用户拥有执行权限

-u 文件

判断该文件是否存在,并且拥有SUID权限

-g 文件

判断该文件是否存在,并且拥有SGID权限

-k 文件

判断该文件是否存在,并且拥有SBit权限

实例

切换回普通用户,创建一个文件 rwx.md,默认权限为 rw-rw-r--

[vagrant~/rwx]$ touch rwx.md

[vagrant~/rwx]$ ll

总用量 0

-rw-rw-r-- 1 vagrant vagrant 0 6月 1 04:23 rwx.md

判断文件权限,有读、写权限,没有执行权限

[vagrant~/rwx]$ [ -r rwx.md ] && echo yes || echo no

yes

[vagrant~/rwx]$ [ -w rwx.md ] && echo yes || echo no

yes

[vagrant~/rwx]$ [ -x rwx.md ] && echo yes || echo no

no

将文件所有者修改为 root ,并修改组权限为可读,不可写,可执行

[vagrant~/rwx]$ sudo chown root rwx.md

[vagrant~/rwx]$ sudo chmod 654 rwx.md

[vagrant~/rwx]$ ll

总用量 0

-rw-r-xr-- 1 root vagrant 0 6月 1 04:23 rwx.md*

此时用户应用的是组权限,即可读,不可写,可执行

[vagrant~/rwx]$ [ -w rwx.md ] && echo yes || echo no

no

[vagrant~/rwx]$ [ -x rwx.md ] && echo yes || echo no

yes

将文件的所有者改回 vagrant

[vagrant~/rwx]$ sudo chown vagrant rwx.md

[vagrant~/rwx]$ ll

总用量 0

-rw-r-xr-- 1 vagrant vagrant 0 6月 1 04:23 rwx.md*

此时用户应用的是所有者权限,即可读、可写、不可执行

[vagrant~/rwx]$ [ -w rwx.md ] && echo yes || echo no

yes

[vagrant~/rwx]$ [ -x rwx.md ] && echo yes || echo no

no

[vagrant~/rwx]$ ./rwx.md

-bash: ./rwx.md: 权限不够

四、两个文件之间进行比较

测试选项

作用

文件1 -nt 文件2

判断文件1的修改时间是否比文件2的新

文件1 -ot 文件2

判断文件1的修改时间是否比文件2的旧

文件1 -ef 文件2

判断文件1和文件2的Inode号是否一致,可以理解为两个文件是否为同一个文件。这适用于判断硬链接很好的方法

1. 比较两个文件的最后修改时间

相隔1秒,创建file1和file2两个文件

[root/tmp/tmp]# touch file1; sleep 1; touch file2

[root/tmp/tmp]# ll

总用量 0

-rw-r--r-- 1 root root 0 6月 1 06:52 file1

-rw-r--r-- 1 root root 0 6月 1 06:52 file2

比较两个文件的最后修改时间

[root/tmp/tmp]# [ file1 -ot file2 ] && echo yes || echo no

yes

[root/tmp/tmp]# [ file1 -nt file2 ] && echo yes || echo no

no

2. 判断两个文件的Inode号是否一致

创建 file 和 file2,并创建一个 file 的硬链接 file_ln

[root/tmp/tmp]# touch file

[root/tmp/tmp]# touch file2

[root/tmp/tmp]# ln file file_ln

由 ll -i 的第一列可以看出 file 和 file_ln 的i节点是一致的

[root/tmp/tmp]# ll -i

总用量 0

34117777 -rw-r--r-- 2 root root 0 6月 1 06:57 file

34117781 -rw-r--r-- 1 root root 0 6月 1 06:58 file2

34117777 -rw-r--r-- 2 root root 0 6月 1 06:57 file_ln

通过 [ file -ef file_ln ] 判断只有 file 和 file_ln 的i节点是一致的

[root/tmp/tmp]# [ file -ef file_ln ] && echo yes || echo no

yes

[root/tmp/tmp]# [ file2 -ef file_ln ] && echo yes || echo no

no

[root/tmp/tmp]# [ file -ef file2 ] && echo yes || echo no

no

五、两个整数之间比较

测试选项

作用

整数1 -eq 整数2

判断整数1是否等于整数2

整数1 -ne 整数2

判断整数1是否不等于整数2

整数1 -gt 整数2

判断整数1是否大于整数2

整数1 -lt 整数2

判断整数1是否小于整数2

整数1 -ge 整数2

判断整数1是否大于等于整数2

整数1 -le 整数2

判断整数1是否小于等于整数2

1. -eq:判断整数1是否等于整数2

[root~]# [ 1 -eq 1 ] && echo yes || echo no

yes

[root~]# [ 1 -eq 2 ] && echo yes || echo no

no

[root~]# [ 2 -eq 1 ] && echo yes || echo no

no

2. -ne:判断整数1是否不等于整数2

[root~]# [ 1 -ne 1 ] && echo yes || echo no

no

[root~]# [ 1 -ne 2 ] && echo yes || echo no

yes

[root~]# [ 2 -ne 1 ] && echo yes || echo no

yes

3. -gt:判断整数1是否大于整数2

[root~]# [ 1 -gt 1 ] && echo yes || echo no

no

[root~]# [ 1 -gt 2 ] && echo yes || echo no

no

[root~]# [ 2 -gt 1 ] && echo yes || echo no

yes

4. -lt:判断整数1是否小于整数2

[root~]# [ 1 -lt 1 ] && echo yes || echo no

no

[root~]# [ 1 -lt 2 ] && echo yes || echo no

yes

[root~]# [ 2 -lt 1 ] && echo yes || echo no

no

5. -ge:判断整数1是否大于等于整数2

[root~]# [ 1 -ge 1 ] && echo yes || echo no

yes

[root~]# [ 1 -ge 2 ] && echo yes || echo no

no

[root~]# [ 2 -ge 1 ] && echo yes || echo no

yes

6. -le:判断整数1是否小于等于整数2

[root~]# [ 1 -le 1 ] && echo yes || echo no

yes

[root~]# [ 1 -le 2 ] && echo yes || echo no

yes

[root~]# [ 2 -le 1 ] && echo yes || echo no

no

六、字符串的判断

测试选项

作用

-z 字符串

判断字符串是否为空

-n 字符串

判断字符串是否为非空

字符串1 == 字符串2

判断字符串1和字符串2是否相等

字符串1 != 字符串2

判断字符串1和字符串2是否不相等

1. -z 字符串:判断字符串是否为空

[root~]# name=''

[root~]# [ -z "$name" ] && echo yes || echo no

yes

[root~]# name=Wang

[root~]# [ -z "$name" ] && echo yes || echo no

no

[root~]# unset name

[root~]# [ -z "$name" ] && echo yes || echo no

yes

2. -n 字符串:判断字符串是否为非空

[root~]# name=''

[root~]# [ -n "$name" ] && echo yes || echo no

no

[root~]# name=Wang

[root~]# [ -n "$name" ] && echo yes || echo no

yes

[root~]# unset name

[root~]# [ -n "$name" ] && echo yes || echo no

no

3. 字符串1 == 字符串2:判断字符串1和字符串2是否相等

[root~]# a=123

[root~]# b=123

[root~]# c=1234

[root~]# [ "$a" == "$c" ] && echo yes || echo no

no

[root~]# [ "$a" == "$b" ] && echo yes || echo no

yes

4. 字符串1 != 字符串2:判断字符串1和字符串2是否不相等

[root~]# a=123

[root~]# b=123

[root~]# c=1234

[root~]# [ "$a" != "$b" ] && echo yes || echo no

no

[root~]# [ "$a" != "$c" ] && echo yes || echo no

yes

七、多重条件判断

测试选项

作用

判断1 -a 判断2

逻辑与,判断1 和 判断2都为真,最终结果才为真

判断1 -o 判断2

逻辑或,判断1 和 判断2有一个为真,最终结果就为真

! 判断

逻辑非,使原始的判断式取反

1. 判断1 -a 判断2:逻辑与,判断1 和 判断2都为真,最终结果才为真

[root~]# [ a == a -a b == b ] && echo yes || echo no

yes

[root~]# [ a == a -a a == b ] && echo yes || echo no

no

[root~]# [ a == b -a b == b ] && echo yes || echo no

no

[root~]# [ a == b -a b == a ] && echo yes || echo no

no

2. 判断1 -o 判断2:逻辑或,判断1 和 判断2有一个为真,最终结果就为真

[root~]# [ a == a -o b == b ] && echo yes || echo no

yes

[root~]# [ a == a -o a == b ] && echo yes || echo no

yes

[root~]# [ a == b -o b == b ] && echo yes || echo no

yes

[root~]# [ a == b -o b == a ] && echo yes || echo no

no

3. ! 判断:逻辑非,使原始的判断式取反

[root~]# [ ! a == a ] && echo yes || echo no

no

[root~]# [ ! a == b ] && echo yes || echo no

yes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值