Linux使用结构化命令
一、if基础结构化语句
1. 底层概念
Shell里if不直接判断真假,而是判断紧跟在if后的命令执行返回码:
命令执行成功返回0,会执行then中的代码;命令执行失败返回非0,直接跳过then分支。
2. 基础语法写法
1. 标准多行格式
bash
if 待执行判断命令
then
满足条件时执行代码
fi
2. 单行简写格式,用分号分隔语句
bash
if 命令; then 执行语句; fi
3. 二分支if-then-else
满足条件执行then,不满足直接走else分支
bash
if 命令
then
条件成立代码
else
条件不成立代码
fi
4. 多分支if-elif
连续判断多个条件,匹配到第一个成立的分支就执行,全部不匹配可搭配else收尾
bash
if 条件1
then
代码1
elif 条件2
then
代码2
elif 条件3
then
代码3
else
全部条件都不满足时执行
fi
支持if语句嵌套,实现多层复合逻辑判断。
二、test命令与单括号 [ ]
test是Shell内置条件检测工具,[ ] 是test的简写形式,左右括号内侧必须保留空格,否则语法报错。
两种写法完全等价:
bash
# 完整test写法
if test 条件; then ... fi
# 简写单括号写法
if [ 条件 ]; then ... fi
1. 整数数值判断(仅支持整数,浮点数会报错)
eq:两个数字相等
ne:两个数字不相等
gt:左边数字大于右边
ge:左边数字大于等于右边
lt:左边数字小于右边
le:左边数字小于等于右边
2. 字符串判断
字符串1 = 字符串2:两个字符串完全一致,区分大小写
字符串1 != 字符串2:两个字符串不相同
字符串1 > 字符串2:按字典序左边更大,单括号内大于号必须加反斜杠转义
字符串1 < 字符串2:按字典序左边更小,同样需要转义
n 字符串:字符串不为空
z 字符串:字符串为空
3. 文件状态检测
e 文件路径:判断文件或目录是否存在
f 文件路径:判断目标是普通文件且存在
d 文件路径:判断目标是文件夹且存在
r 文件路径:文件拥有可读权限
w 文件路径:文件拥有可写权限
x 文件路径:文件拥有可执行权限
s 文件路径:文件存在且内容不为空
三、复合逻辑条件
用于拼接多个test单括号判断,两种逻辑符号:
&& 逻辑与:前后两个条件必须同时成立,整体才为真
书写格式:[ 条件1 ] && [ 条件2 ]
|| 逻辑或:前后任意一个条件成立,整体即为真
书写格式:[ 条件1 ] || [ 条件2 ]
四、高级判断语法(bash独有)
1. 双方括号 [[ 条件 ]]
专门优化字符串判断,解决单括号的各种限制:
1. 大于小于符号不需要反斜杠转义
2. 支持通配符模糊匹配,例如判断字符串是否以指定字符开头
3. 变量包含空格时不会解析出错
4. 内部可以直接写&&、||,不用拆分多个括号
适用场景:用户名匹配、文本模糊比对、字符串大小比较
示例:if [[ $USER == "tan" ]]
2. 双括号 (( 算术表达式 ))
只处理整数数学运算,完全C语言风格运算规则:
1. 变量内部不用写$符号,直接写变量名即可
2. 支持平方**、自增、加减乘除、大于小于、逻辑与或
3. 无需转义任何比较符号
适用场景:数字大小判断、数学计算赋值
示例:if (( var1 ** 2 > 90 ))
if-then语句
test命令
test命令-数值比较
test命令-字符串比较
复合条件测试
双方括号和双括号