基本语法
1,
test 条件表达式
2,注意:判断语句两边必须保留一个空格
[ 条件表达式 ]
3,支持正则表达式,
注意:判断语句两边必须保留一个空格 注意:\[ 这个里面只能使用 \|\| 或者 \&\& 不能使用 -a 和 -o ]
[[ 条件表达式 ]]
判断结果是真还是假,通过 $?来判断,如果结果是"0"那就是真,如果结果是"1"那就是假
文件存在与否判断
#文件/目录 是否存在 exist
test -e 文件/目录的名字
#另一种写法
[ -e 文件/目录的名字 ]
#是否 是普通磁盘文件(文本、脚本等),目录、软链接不满足 file
test -f 文件的名字
#另一种写法
[ -f 文件名 ]
#是否是文件夹(目录)directory
test -d 目录的名字
#另一种写法
[ -d 目录名 ]

是文件或者目录吗?是 是普通的文件吗?是 是一个目录吗?不是

文件权限判断

当前用户对1文件有读取权限吗?有 当前用户对1文件有写入权限吗?有 当前用户对1文件有执行权限吗?没有

两个文件比较新旧
test file1 -nt file2 比较file1是否比file2新
test file1 -ot file2 比较file1是否比file2旧
test file1 -ef file2 比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode
-nt:new than
-ot:old than
-ef:equal file 断两个文件inode 编号完全一致 → 是同一个物理文件(硬链接)返回真$?=0

硬链接 (hard link)
Linux 磁盘里:
- inode 号:文件在磁盘的唯一身份证,保存文件大小、权限、磁盘块位置
- 文件名:只是 inode 的别名、快捷入口
硬链接本质:多个不同文件名,共用同一个 inode 号
# 创建硬链接:ln 源文件 硬链接名
ln file1.txt link1.txt
此时 file1.txt 和 link1.txt inode 一模一样

硬链接特点
1,删一个文件名,文件本体还在:inode 引用计数 - 1,计数 > 0 时数据不丢失
# 只删文件名,link1还能正常读取内容
rm file1.txt
2,不能跨分区 / 跨磁盘创建:不同磁盘 inode 编号独立,无法共用 inode
3,不能对目录创建硬链接(系统保护,防止目录循环死链)



- 硬链接:同一个实体,多个名字,删名字不删数据
- 软链接:快捷方式,存路径,删源文件快捷方式作废
大小比较符号
在 Shell 中,-eq、-ne、-gt、-lt、-ge 和 -le 用于数值比较。它们常用于测试两个数字是否相等、不等、大小关系等
-eq (equal)相等
-ne (not euqal)不等
-gt (greater than)大于
-lt (litter than)小于
-ge (greater equal)大于等于
-le (litter equal)小于等于

字符串之间的判断
-z (zero)是否为空字符串 字符串长度为0,就成立
-n (not zero)是否为非空字符串 只要字符串非空,就是成立
变量 = 变量2 是否相等
变量1 != 变量2 是否不等


-eq和=号的区别?
-eq:equal,整数专用比较符(只认数字)=:没有英文缩写,就是字符串全等符号
read实现脚本交互式录入
从键盘接收用户输入,把输入内容存入变量,实现脚本交互式录入
-p 提示信息
-p "提示文字" 变量名
功能:输入前打印提示语句,不用额外echo,prompt提示、提示信息
# 终端输出:我是 ,用户输入lulu → name=lulu
read -p "我是 " name

-r 原始读取
-r变量
功能:**禁止反斜杠\转义,原样保留输入的\ **raw(原始读取)
#手动输入:\a\b\c
read -r a
\a\b\c

#不加-r
read a
\a\b

-s静默模式
silent 静默(密码隐藏输入)
作用:敲键盘打字,屏幕完全不显示任何字符,专门用来输密码、密钥,防止旁边人偷看。
#-s + -p 组合最常用
read -s -p "请输入密码:" pwd
-p:打印提示文字请输入密码:-s:输入全程隐藏,看不见密码- 输完回车,密码存进变量
pwd

逻辑判断符号
-a 和 && (and 逻辑与) 两个条件同时满足,整个大条件为真
-o 和 || (or 逻辑或) 两个条件满足任意一个,整个大条件为真
&& 或者 || 有短路效应
&&:逻辑与(并且) ,前命令成功(返回0),才执行后面命令
||:逻辑或(或者) ,前命令失败(返回非 0),才执行后面命令
短路效应:只要左边就能确定整体结果,右边代码直接不执行(跳过)
&& 短路规则(全真才真,一假全假)
|| 短路规则(一真全真,全假才假)
命令1 && 命令2
命令1 || 命令2
- 如果命令 1 执行失败($?≠0):直接短路,命令 2 不运行(左边已经错了,整体必然错,没必要跑右边)
- 只有命令 1 成功($?=0):才继续跑命令 2
- 如果命令 1 执行成功($?=0):直接短路,命令 2 不运行(左边已经成功,整体结果一定成立,跳过右边)
- 只有命令 1 失败($?≠0):才执行命令 2
注意:如果想一个中括号搞定,多个条件判断,那么使用-a/-o
如果想多个中括号搞定多个条件判断,那么使用 && / ||
-a = and → 逻辑与(并且,两个条件全都成立才为真)
-o = or → 逻辑或(或者,任意一个成立就为真)
[ 条件1 -a 条件2 ]
[ 条件1 -o 条件2 ]
#案例:-eq (equal等于) -ne (not equal 不等于)
[ 1 -eq 1 -a 1 -ne 0 ]

普通命令:$?= 程序执行是否报错;[]判断命令:$?= 条件逻辑是否成立
⚠️ 禁忌:
单[]括号里面不能直接写 &&/||,会语法报错!
&& ||放在两个中括号的外侧,用来连接两个独立判断
✅ 同括号里用 -a/-o,括号之间用 &&/||