Shell 结构化命令学习

📅 2026/7/11 22:22:52
Shell 结构化命令学习
Shell 结构化命令学习一、完整知识框架梳理本次课程核心是 Shell 脚本里的结构化逻辑语句让脚本不再是单纯顺序执行命令能够根据不同条件走不同执行流程整体分为五大板块if 分支语句、test 测试判断、三类条件比较、复合布尔条件、双方括号与双括号高级判断所有操作都在 Xshell 连接 Linux 虚拟机完成下面分模块梳理概念、用法与实操要点。一if 系列分支语句if 是脚本最基础的结构化命令核心逻辑和普通编程语言不一样bash 的 if 后紧跟一条命令靠这条命令的退出状态码判断是否执行 then 内代码返回码 0 代表条件成立非 0 则跳过。基础 if-then语法有两种写法分行版plaintextif 命令then执行语句fi简写同行版用分号分隔 if 与 thenif 命令; then 语句; fi只有条件成立时才运行 then 中的代码没有备选执行分支。2. if-then-else 双分支当命令执行失败、返回非 0 状态码时会自动执行 else 里的内容实现 “成立做 A不成立做 B” 的逻辑。3. if-elif 多分支多个判断条件依次匹配不用多层嵌套 if从上到下依次判断匹配成功就执行对应 then全部不匹配则可搭配 else 兜底。4. if 嵌套在 if、elif、else 内部继续写 if 判断实现多层级的复合逻辑。二test 测试命令单纯 if 只能判断命令是否运行成功想要比较数字、文本、文件状态必须依靠 test 命令有两种等价写法test 条件[ 条件 ] 方括号格式日常使用更多重点注意方括号左右两侧必须留空格否则脚本直接报错。test 满足条件返回 0不满足返回非 0刚好适配 if 的判断逻辑。test 一共支持三类判断数值比较、字符串比较、文件状态判断。test 数值比较仅支持整数所有比较符统一以减号开头不能直接用 、浮点数字会直接报错。-eq等于-ne不等于-gt大于-ge大于等于-lt小于-le小于等于test 字符串比较区分大小写、标点符号大于小于符号需要加反斜杠转义还能检测字符串是否为空。 、!判断字符串相等 / 不等、按 ASCII 码比较字符串大小-n字符串长度不为空有内容-z字符串长度为空无内容test 文件 / 目录状态判断用来检测路径是否存在、文件类型、读写执行权限、文件新旧等常用参数-e文件 / 目录存在-d路径是目录-f路径是普通文件-r /-w/-x文件可读、可写、可执行-nt /-ot文件更新、文件更旧三复合条件逻辑布尔运算多个 test 条件组合判断两种逻辑符逻辑与 [条件1] [条件2]两个条件全部成立才返回真逻辑或 ||[条件1] || [条件2]任意一个条件成立就返回真。四双方括号 [[]] 与双括号 (( )) 高级判断双方括号 [[ 条件 ]]是 bash 独有的增强字符串判断不用转义大小于号支持通配符模式匹配适合用户名、文本模糊匹配场景。双括号 (( 表达式 ))专门做高级数学运算与数值判断支持自增、幂运算、位运算、逻辑与或里面的大于小于号不需要转义仅支持整数运算。五配套知识点总结fi 是 if 语句结束标记每一个 if 必须对应一个 fitest 只支持整数小数运算仍需要 bc 工具普通 [] 做字符串对比时、 必须加 \ 转义[[ ]] 不用双括号内部可以直接写数学公式不用搭配 $[]、expr。二、Xshell 分步实操流程实操 1基础 if-then、if-else、elif 多分支新建脚本 if_base.sh先写基础 if-then用 pwd 命令作为判断条件命令正常执行就打印提示文字故意写一条不存在的错误命令放到 if 后验证命令失败时 then 内代码不会运行改写脚本增加 else 分支区分命令成功、失败两种输出增加 elif 实现多分支判断当前登录用户名匹配 zhang、lilei 分别输出提示不匹配走 else截图每一段脚本运行结果对比成功、失败、多分支三种输出效果。实操 2test 数值比较实操新建 test_num.sh定义两个整数变量用[ 变量 -gt 数字 ]判断大小分别测试 - eq 相等、-ne 不等、-lt 小于等各类数值运算符尝试给变量赋值小数 5.555运行脚本观察报错验证 test 不支持浮点数截图整数正常判断、浮点报错两段界面。实操 3test 字符串空值、大小对比新建 test_str.sh分别定义有内容、空字符串两个变量使用 - n、-z 判断字符串是否为空打印对应提示两组大小写不同的字符串用、对比大小观察大小写排序规则截图字符串匹配、空值检测的运行输出。实操 4test 文件目录状态检测新建 test_file.sh检测家目录 $HOME 是否存在、是否为目录手动创建 test.txt 文件用 - e、-f、-w 分别检测文件存在、普通文件、可写权限新建两个文本用 - nt、-ot 对比文件新旧修改文件权限验证 - r、-x 可读可执行判断结果截图全部检测输出。实操 5复合条件 、|| 逻辑判断编写脚本同时判断目录存在 目录内文件可写两个条件同时满足才输出提示使用 || 逻辑或判断文件存在或者目录存在满足其一就打印信息修改文件权限分别制造 “双条件成立、一个成立、全部不成立” 三种场景截图不同结果。实操 6双方括号 [[]]、双括号 (( )) 高级运算判断双括号 (())定义数字变量做平方、自增运算直接用 判断数值大小不用转义双方括号 [[]]匹配登录用户名不用转义比较符号做模糊文本匹配对比普通 [] 和 [[]] 字符串对比写法差异截图两段脚本执行结果。实操 7if 嵌套综合练习在 else 分支内部再写一层 if 判断先判断用户是否为指定账号账号匹配后再判断家目录文件是否存在多层条件叠加完整运行并截图最终输出。三、实操学习总结结构化 if 语句是脚本自动化的核心有了条件判断脚本才能根据服务器、文件、用户的不同状态执行不同操作不再只能死板顺序运行。基础 if 依靠命令退出码判断想要自定义数值、文本、文件判断必须搭配 test/[]写方括号判断千万不要忘记左右空格很容易踩坑。test 分为数值、字符串、文件三类判断适用场景清晰数字对比用 - gt/-eq文本判空用 - n/-z检测文件权限用 - d/-f/-w。普通 [] 对比字符串大小要转义符号日常做字符串匹配优先用 [[]]复杂数学计算、数值判断直接用 (( ))写法更简洁支持幂运算、自增等高级运算。多分支判断用 elif 代替多层 if 嵌套代码可读性更高多层逻辑叠加可以用 、|| 组合多个条件简化脚本代码。实操踩坑提醒test 只支持整数小数会直接报错if 语句结尾必须写 fi漏写会直接报语法错误逻辑与 需要两个条件全部成立才执行代码。