AI智能
改变未来

5.Shell之条件判断

小破站学习笔记

条件判断语法结构

true 真false 假

格式1

test 条件表达式

格式2

[条件表达式]

格式3

[[条件表达式]] 支持正则

[] [[]] 两边都要有空格

判断什么
判断文件类型
判断文件新旧
判断字符串是否相等
判断是否为空

判断文件类型

-e 	判断文件是否存在(任何类型文件)-f 	判断文件是否存在并且是一个普通文件-d 	判断文件是否存在并且是一个目录-L 	判断文件是否存在并且是一个软链接文件-b 	判断文件是否存在并且是一个块设备文件-S 	判断文件是否存在并且是一个套接字文件-c 	判断文件是否存在并且是一个字符设备文件-p 	判断文件是否存在并且是一个命名管道文件-s 	判断文件是否存在并且是一个非空文件(有内容)

经常常用的

-f 判断文件是否存在并且是一个普通文件
-d判断文件是否存在并且是一个目录
-s 判断文件是否存在并且是一个非空文件(有内容)

判断文件权限

-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 判断字符串是否不相等

-z “hello world” 引号引起来

多重条件判断

-a 和 && 逻辑与  多个条件同时满足-o 和 || 	逻辑或  其中任意一个满足

[ 1 -eq 1 -a 1 -eq 0 ]

[ 1 -eq 1 ] && [ 1 -eq 0 ]

[ 1 -eq 1 -o 1 -eq 0 ]

[ 1 -eq 1 ] || [ 1 -eq 0 ]

&&	 前面表达式为真,才会执行后面的代码||  前面表达式为假,才会执行后面的代码;	只用于分割命令或者表达式

这个应该很实用

举例
判断当前用户是不是普通用户

id -u

获取uid

[ $(id -u) -eq 0 ] && echo \"admin\"

前面为真才会打印admin

[ $(id -u) -eq 0 ] || echo \"is not admin\"

前面为假才会打印is not admin

数值比较

类C风格 在

(())

里,

==

代表判断

=

代表赋值

字符比较

\" \"

双引号引起来,看作一个整体;

=

==

在 [ 字符串 ] 比较中都表示判断

[] [[]] 有什么区别

字符串判断
[ “字符串” = “字符串2” ]

[[ 字符串 = 字符串2 ]]
可以不加引号\”\”

还有就是在用

-a
&&

的时候 细节问题

逻辑运算符总结

符号;&& || 都可以用来分割命令或者表达式;分号完全不考虑前面语句是否执行正确 都会执行;后面的语句&& 符号 需要考虑&&前面语句的正确性,前面语句正确才会执行&&后面的内容;反之亦然|| 符号 需要考虑||前面语句的非正确性,前面语句执行错误才会执行||后面的语句如果&&和||同时出现,从左往右依次,按上面规则来
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 5.Shell之条件判断