shell编程-条件判断

来源:互联网 发布:java爬虫 项目 编辑:程序博客网 时间:2024/06/10 15:44

1. 按照文件的类型进行判断

判断选项 作用 -b 文件 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)。 -c 文件 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真)。 -d 文件 判断该文件是否存在,并且是否为目录文件(是目录文件为真)。 -e 文件 判断该文件是否存在(存在为真)。 -f 文件 判断该文件是否存在,并且是否为普通文件(是普通文件为真)。 -L 文件 判断该文件是否存在,并且是否为符号链接文件(是符号链接文件为真)。 -p 文件 判断该文件是否存在,并且是否为管道文件(是管道文件为真)。 -s 文件 判断该文件是否存在,并且是否为非空(非空为真)。 -S 文件 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真)。

判断格式有两种:

  • test 判断选项 文件
  • [ 判断选项 文件]

注意:[ ] 内部两侧都必须有空格。

预定义变量$?中保存了上一条命令的执行结果(0表示执行正确;非0表示执行错误)。

因此,可用 $? 知道上一条命令的执行(判断)结果(0表示存在,非0表示不存在)。

示例:

test -e /root/install.logecho $?[ -e /root/install.log123 ]echo $?[ -d /root ] && echo "yes" || echo "no" 如果/root是目录,则打印yes,否则,打印no。# 输出yes[ -e /root ] && echo yes || echo no判断/root是否存在。# 输出yes[ -f /root ] && echo yes || echo no判断/root是否为普通文件。# 输出no

2. 按照文件的权限进行判断

只要所有者、所属组、其他人中的任何一个用户有相应的权限,判断结果就为真。

判断选项 作用 -r 文件 判断文件是否存在,并且是否有读权限。 -w 文件 判断文件是否存在,并且是否有写权限。 -x 文件 判断文件是否存在,并且是否有执行权限。 -u 文件 判断文件是否存在,并且是否有SUID权限。 -g 文件 判断文件是否存在,并且是否有SGID权限。 -k 文件 判断文件是否存在,并且是否有SBIT权限。

示例:

[ -w /root/a.txt ] && echo yes || echo no       文件/root/a.txt如果有写权限,则输出yes,否则,输出no

3. 两个文件之间进行比较

判断选项 作用 文件1 -nt 文件2 判断文件1的修改时间是否比文件2的新(新则为真)。 文件1 -ot 文件2 判断文件1的修改时间是否比文件2的旧(旧则为真)。 文件1 -ef 文件2 判断文件1是否和文件2的inode号一致,可以理解为两个文件是否为同一文件。这个判断是用于判断硬链接很好的方法 。

示例:

ln /root/a.txt /root/an.txt     为a.txt文件创建一个硬链接an.txt文件。某个文件的硬链接的inode号和该文件自身的inode号一致。ll -i /root/an.txt              查看an.txt文件的inode节点号。[ /root/a.txt -ef /root/an.txt ] && echo yes || echo no

4. 两个整数之间的比较

判断选项 作用 整数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。

示例:

[ 63 -ge 45 ] && echo yes || echo no

5. 字符串的判断

判断选项 作用 -z 字符串 判断字符串是否为空。 -n 字符串 判断字符串是否为非空。 字符串1 == 字符串2 判断字符串1是否等于字符串2。也可用单个=进行判断。(推荐用==) 字符串1 != 字符串2 判断字符串1是否不等于字符串2。

说明: 可用 [ -z $变量名 ] 来判断变量的值是否为空。

示例:

name=admin[ -z $name ] && echo yes || echo no        # 输出no[ "$name" == admin ] && echo yes || echo no # 输出yes

6. 多重条件判断

判断选项 作用 判断1 -a 判断2 逻辑与。判断1和判断2都为真,最终的结果才为真。 判断1 -o 判断2 逻辑或。判断1和判断2有一个为真,最终的结果就为真。 ! 判断 逻辑非。将原始的判断结果取反。

示例:

age=100[ -n $age -a $age -gt 89 ] && echo yes || echo no# 输出yes[ ! -n $age ] && echo yes || echo no# 输出no
原创粉丝点击