小破站学习笔记
条件判断语法结构
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
&&
的时候 细节问题
逻辑运算符总结
符号;&& || 都可以用来分割命令或者表达式;分号完全不考虑前面语句是否执行正确 都会执行;后面的语句&& 符号 需要考虑&&前面语句的正确性,前面语句正确才会执行&&后面的内容;反之亦然|| 符号 需要考虑||前面语句的非正确性,前面语句执行错误才会执行||后面的语句如果&&和||同时出现,从左往右依次,按上面规则来