Linux Shell 005-条件判断
2023-12-25 09:29:35
Linux Shell 005-条件判断
本节关键字:Linux、Bash Shell、条件判断
相关指令:test、echo、[ ]、[[ ]]
条件判断语法结构
格式1:test 条件表达式
格式2:[ 条件表达式 ]
格式3:[[ 条件表达式 ]]
说明:
- 格式3支持正则=~
- [ 两边必须都有空格 ]
- [[ 两边必须都有空格 ]]
条件判断相关参数
判断文件类型
判断参数 | 含义 |
---|---|
-e | 判断文件是否存在(任何类型文件) |
-f | 判断文件是否存在并且是一个普通文件 |
-d | 判断文件是否存在并且是一个目录 |
-L | 判断文件是否存在并且是一个软连接文件 |
-b | 判断文件是否存在并且是一个块设备文件 |
-S | 判断文件是否存在并且是一个套接字文件 |
-c | 判断文件是否存在并且是一个字符设备文件 |
-p | 判断文件是否存在并且是一个命名管道文件 |
-s | 判断文件是否存在并且是一个非空文件(有内容) |
使用示例
test -e file # 只要文件存在条件为真
[ -d /shell01/dir1 ] # 判断目录是否存在,存在条件为真
[ ! -d /shell01/dir1 ] # 判断目录是否存在,不存在条件为真
[[ -f /shell01/1.sh ]] # 判断文件是否存在,并且是一个普通的文件
判断文件权限
判断参数 | 含义 |
---|---|
-r | 当前用户对其是否可读 |
-w | 当前用户对其是否可写 |
-x | 当前用户对其是否可执行 |
-u | 是否有suid,高级权限冒险位 |
-g | 是否sgid,高级权限强制位 |
-k | 是否有t位,高级权限粘滞位 |
判断文件的修改时间
判断参数 | 含义 |
---|---|
file1 -nt file2 | 比较file1是否比file2新 |
file1 -ot file2 | 比较file1是否比file2旧 |
file1 -ef file2 | 比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode |
判断整数
判断参数 | 含义 |
---|---|
-eq | 相等 |
-ne | 不等 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
判断字符串
判断参数 | 含义 |
---|---|
-z | 判断是否为空字符串,字符串长度为0则成立 |
-n | 判断是否为非空字符串,字符串长度不为0则成立 |
string1 = string2 | 判断字符串是否相等 |
string1 != string2 | 判断字符串是否相不等 |
多重条件判断与逻辑运算符
判断符号 | 含义 |
---|---|
-a 和 && | 逻辑与,[ 1 -eq 1 -a 1 -ne 0 ] [ 1 -eq 1 ] && [ 1 -ne 0 ] |
-o 和 || | 逻辑或,[ 1 -eq 1 -o 1 -ne 1 ] |
补充说明
&& # 前面的表达式为真,才会执行后面的代码
|| # 前面的表达式为假,才会执行后面的代码
; # 只用于分割命令或表达式
使用示例
$ [ $(id -u) -eq 0 ] && echo "the user is admin"
$ [ $(id -u) -ne 0 ] && echo "the user is not admin"
$ [ $(id -u) -eq 0 ] && echo "the user is admin" || echo "the user is not admin"
$ uid=`id -u`
$ test $uid -eq 0 && echo this is admin
this is admin
$ [ $(id -u) -ne 0 ] || echo this is admin
this is admin
$ [ $(id -u) -eq 0 ] && echo this is admin || echo this is not admin
this is admin
$ su - stu1
[stu1@server ~]$ [ $(id -u) -eq 0 ] && echo this is admin || echo this is not admin
this is not admin
$ a=
$ test -z $a;echo $?
$ a=hello
$ test -z $a;echo $?
$ test -n $a;echo $?
$ test -n "$a";echo $?
$ [ '' = $a ];echo $?
-bash: [: : unary operator expected
2
$ [[ '' = $a ]];echo $?
0
$ [ 1 -eq 0 -a 1 -ne 0 ];echo $?
$ [ 1 -eq 0 && 1 -ne 0 ];echo $?
$ [[ 1 -eq 0 && 1 -ne 0 ]];echo $?
条件判断(类C风格)
使用示例
注意:在(( ))中,=表示赋值;==表示判断
$ ((1==2));echo $?
$ ((1<2));echo $?
$ ((2>=1));echo $?
$ ((2!=1));echo $?
$ ((`id -u`==0));echo $?
$ ((a=123));echo $a
$ unset a
$ ((a==123));echo $?
# 注意:双引号引起来,看作一个整体;= 和 == 在 [ 字符串 ] 比较中都表示判断
$ a='hello world';b=world
$ [ $a = $b ];echo $?
$ [ "$a" = "$b" ];echo $?
$ [ "$a" != "$b" ];echo $?
$ [ "$a" !== "$b" ];echo $? # 错误
$ [ "$a" == "$b" ];echo $?
$ test "$a" != "$b";echo $?
判断符号 [ ] 和 [[ ]] 的区别
- 当判断的字符串为空的时候,[ ]判断会报错,[[ ]]不会
- 使用逻辑运算符时,[ ]判断会报错,[[ ]]不会
文章来源:https://blog.csdn.net/qq_45157350/article/details/135167463
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!