shell条件判断
1.判断语法
a) test 条件表达式
b) [ 条件表达式 ]
c) [[ 条件表达式 ]] 可匹配正则 =~
d) 判断后执行多个命令
[ 条件1 ] && { 命令1 命令2 }
例如:
[ 1 -eq 2 ]&&{ echo aa; echo bb; }||{ echo cc echo dd }
man test去查看,很多的参数都用来进行条件判断
2.文件类型判断
-e 是否存在 不管是文件还是目录,只要存在,条件就成立 -f 是否为普通文件 -d 是否为目录 -S socket -p pipe -c character -b block -L 软link
3.文件内容判断
-s 是否为非空文件
! -s 表示空文件
4.文件权限判断
-r 当前用户对其是否可读 -w 当前用户对其是否可写 -x 当前用户对其是否可执行 -u 是否有suid -g 是否sgid -k 是否有t位
5.两个文件的比较判断
file1 -nt file2 比较file1是否比file2新 file1 -ot file2 比较file1是否比file2旧 file1 -ef file2 比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode
6.整数之间的判断
-eq 相等 -ne 不等 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于
7.字符串之间的判断
-z 是否为空字符串 字符串长度为0,就成立
-n 是否为非空字符串 只要字符串非空,就是成立
string1 = string2 是否相等 --等号两边要有空格
string1 != string2 不等
! 结果取反
注意
[ "$1" = "abc" ] --判断字符是否相等,变量也要用双引号
8.多重条件判断
逻辑判断符号:
-a 和 && 逻辑与
只有两个条件都成立,整个大条件才成立
[ 1 -eq 1 ] && [ 2 -ne 3 ]
[ 1 -eq 1 -a 2 -ne 3 ]
-o 和 || 逻辑或
只要其中一个条件成立,整个大条件就成立
[ 1 -eq 1 -o 2 -ne 2 ]
[ 1 -eq 1 ] || [ 2 -ne 2 ]
! 逻辑非 优先级最低
-a 优先级 比 -o 优先级要高
[[]] 和(())中可以使用&& || 不能使用 -a -o
9.实例
# [ $(id -u) -eq 0 ] && echo "当前是超级用户" --id -u username 可以查看用户id
$ [ $UID -eq 0 ] && echo "当前是超级用户" || echo "you不是超级用户"
# ((1==2));echo $? --C语言风格的数值比较
# ((1>=2));echo $?
题目:输入一个路径,判断路径是否存在,而且输出是文件还是目录,如果是链接文件,还得输出是有效的连接还是无效的连接
思路:链接文件也属于文件,所以先判断链接文件,再去判断是否为文件
#!/bin/bash read -p "Input your path:" path if [ -e $path -a -L $path ];then echo "$0 is link file" elif [ ! -e $path ] && [ -L $path ];then echo "$0 is not effctive link file" elif [ -d $path ];then echo "$0 is a dirctory" elif [ -f $path ];then echo " $0 is file" else echo "$0 is other file" fi
ls -L dir -L可以判断软链接
--无效链接用-e判断会不存在
-L 如果遇到性质为符号链接的文件或目录,直接列出该链接所指向的原始文件或目录;