Shell结构语句
if-then 基础语句1. 核心原理bash 的 if 不判断布尔值而是执行 if 后的命令命令退出状态码 0执行成功→ 执行 then 代码块非0执行失败→ 跳过 then直接执行后续脚本fi 标记 if 语句结束。2. 两种标准写法写法1分行if commandthen执行命令fi写法2分号压缩一行; 分隔同多行命令if command; then执行命令fi3. if-then-else 二分支命令执行成功走 then失败走 elseif commandthen成功逻辑else失败逻辑fi4. if-elif 多分支多条件依次判断匹配即执行对应代码块无匹配直接结束if cmd1then逻辑1elif cmd2then逻辑2elif cmd3then逻辑3fi5. 常见错误解决1. 遗漏 fi脚本报语法错误每个 if 必须配套 fi2. then 单独换行无分号单行 if 末尾必须加 ;3. 命令拼写错误if 后命令不存在会直接输出报错需校验命令名称二、test 条件测试命令1. 作用弥补原生 if 只能判断命令退出码的缺陷可自定义数值/字符串/文件三类条件条件成立返回状态码0。2. 两种等价语法写法1完整 test 关键字if test 条件thenfi写法2简写 [][] 本质是 test 别名if [ 条件 ]thenfi硬性规则[、] 两侧必须保留空格否则语法报错。3. 三大测试类型1数值比较仅支持整数浮点会报错参数 作用-eq 相等-ne 不等-gt 大于-ge 大于等于-lt 小于-le 小于等于2字符串比较参数 作用str1 str2 字符串相等区分大小写str1 ! str2 字符串不等str1 str2 字符串更小 必须转义 \str1 str2 字符串更大 必须转义 \-n str 字符串非空长度≠0-z str 字符串为空长度03文件/目录状态测试参数 作用-e file 文件/目录是否存在-d file 存在且为目录-f file 存在且为普通文件-r/-w/-x 文件可读/可写/可执行-O/-G 文件归属当前用户/当前用户组file1 -nt file2 file1 更新file1 -ot file2 file1 更旧4. test 常见错误解决1. [] 无空格[$var] 报错改为 [ $var ]2. 浮点数值对比test 不支持小数改用 (( )) 高级运算3. 字符串大小比较未转义 会被识别为重定向必须写 \ \4. 空变量未加引号变量为空时 [ $var ] 语法崩溃建议 [ $var ]三、复合条件逻辑布尔运算用 与、||或拼接多个 [] 测试条件1. [ 条件1 ] [ 条件2 ]两个条件同时成立才为真2. [ 条件1 ] || [ 条件2 ]任意一个条件成立即为真常见错误逻辑运算符左右必须是完整 [] 测试块不能写成 [ 条件1 条件2 ]四、双括号 (( )) 双方括号 [[ ]]1. 双括号 (( 数学表达式 ))用于高级数值运算无需转义符号支持幂运算、自增、位运算等支持符号 -- **幂 || 等示例if (( $num ** 2 90 ));then2. 双方括号 [[ 字符串匹配 ]]增强字符串判断支持通配符模式匹配 无需转义示例if [[ $USER zhang ]];then两者通用注意点括号内侧保留空格(( var )) / [[ str ]]紧贴括号会语法报错五、整体知识点总结1. 基础流程if-then → if-then-else → if-elif 多分支fi 闭合语句2. 条件判断核心test / [] 实现数值、字符串、文件三类基础测试3. 多条件组合 与、|| 或 复合多个测试语句4. 高级拓展(( ))复杂数学运算、浮点外高级数值逻辑[[ ]]字符串模式匹配简化比较符号5. 高频踩坑点汇总[] 两侧无空格、遗漏 fi、单行 if 缺分号test 不支持浮点数、字符串比较 未转义空变量未双引号包裹、复合条件混用单括号逻辑符