Shell判断基础
判断语句的写法
-
[[ 表达式 ]]
-
[ 表达式 ]
-
test 表达式
-
使用规范:
- 表达式两边有空格
- 表达式内部运算符两边有空格
-
[[]]、[]、test区别:
-
[[]]:能使用
>
和<
进行排序操作,而且支持使用&&
和||
,可以使用正则表达式 -
[]或者test:表达式中不能使用
&&
、||
[[]]功能更强大
-
-
执行多条语句
-
分号
;
按顺序执行,都会执行,整个命令的退出码以最后一条命令为准
-
与
&&
仅当前一条命令执行成功后执行,整个命令的退出码取决于是否都执行成功
-
或
||
仅当前一条命令执行失败或不执行时执行,整个命令的退出码取决于是否有执行成功
字符串的判断
符号 | 含义 |
---|---|
= | 等于 |
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
-z | 判断字符是否为null ,即长度是否为空 |
-n | 判断字符是否不为null |
test a == a;echo $? #0
[ $USER == noUser ];echo $? #1
[[ $USER == noUser ]];echo $? #1
[[ $USER == root ]] && echo Y || echo N #root用户:Y;非root用户:N
[[ -z $noValue ]] && echo Y || echo N #为空输出:Y;非空输出:N
[[ yes == yes && no == no ]] && echo Y || echo N
[[ b > A ]] && echo Y || echo N #ASCII码比较
-z:判断一个字符串时候为空
整数的判断
符号 | 含义 |
---|---|
-eq | 等于(equal) |
-ne | 不等于(not equal) |
-gt | 大于(greater than) |
-ge | 大于等于(greater or equal) |
-lt | 小于(less than) |
-le | 小于等于(less or equal) |
test 4 -eq 4 && echo Y || echo N #Y
[ 6 -gt 4 ] && echo Y || echo N #Y
[ 6 -le 3 ] && echo Y || echo N #N
procs_num=$(ps aux | wc -l)
[ $procs_num -gt 100 ] && echo Y || echo N #Y
文件属性判断
操作符 | 功能描述 |
---|---|
-e file | 文件是否存在,存在返回真,不存在返回否 |
-s file | 文件是否存在且非空 |
-f file | 是否普通文件 |
-d file | 是否为目录 |
-r file | 当前用户是否具有可读权限 |
-w file | 当前用户是否具有可写权限 |
-x file | 当前用户是否具有可执行权限 |
file1 -nt file2 | file1比file2更新时返回真 |
file1 -ot file2 | file1比file2更旧时返回真 |
touch v1.txt
touch v2.txt
mkdir test
[ ! -e v1.txt ] && echo 对 || echo 错 #错
[ -f test/ ] && echo 对 || echo 错 #错
[ -r v1.txt ] && echo Y || echo N #Y