Linux Shell 结构化命令实操总结
一、核心知识点概念与实操理解
(一)基础 if-then 结构
if-then 是 Shell 最基础的条件判断结构,语法为if 命令; then 语句; fi,逻辑是当 if 后命令执行成功(退出状态码为 0)时,执行 then 后的语句,若命令执行失败(状态码非 0)则跳过 then 部分。在 Xshell 中实操时,可执行有效命令(如pwd)和无效命令(如自定义不存在命令)对比验证,能直观看到命令成功时进入 then 分支,失败时不执行对应代码。
(二)if-then-else 结构
该结构在 if-then 基础上增加 else 分支,语法为if 命令; then 语句1; else 语句2; fi,当 if 后命令执行成功时执行语句 1,失败时执行语句 2,实现 “二选一” 的分支逻辑。实操时可用于判断系统用户是否存在,通过grep 用户名 /etc/passwd命令检索用户信息,成功则输出用户存在并查看相关文件,失败则提示用户不存在。
(三)elif 多分支结构
elif 用于处理多条件判断场景,语法为if 条件1; then 语句1; elif 条件2; then 语句2; else 语句n; fi,会按顺序判断条件,满足某一条件后执行对应语句,若所有条件都不满足则执行 else 部分。在 Xshell 中可通过判断当前登录用户名实现多分支,比如分别匹配特定用户名输出不同提示,未匹配到则输出默认内容。
(四)test 命令与 [] 语法
test 命令用于检测文件状态、数值比较、字符串比较等,语法为test 条件或[ 条件 ](方括号前后需加空格),条件成立时返回状态码 0,失败返回非 0。数值比较仅支持整数,常用参数有-gt(大于)、-ne(不等于)等;字符串比较支持=(相等)、-n(非空)、-z(为空)等;文件状态检测常用-e(存在)、-d(是否为目录)、-w(是否可写)等。实操时可定义变量进行数值对比,或检测家目录及文件状态,验证不同条件的判断结果。
(五)复合条件判断
复合条件通过&&(逻辑与)和||(逻辑或)连接多个 test 条件,&&要求所有条件都成立才返回真,||只要有一个条件成立就返回真,语法为[ 条件1 ] && [ 条件2 ]或[ 条件1 ] || [ 条件2 ]。实操时可同时检测目录是否存在和文件是否可写,验证 “与”“或” 逻辑的差异。
(六)(()) 高级数值运算
双括号(( ))用于高级整数运算,支持加减乘除、幂运算、自增自减等,语法更接近常规数学表达式,无需转义乘法符号,也无需空格分隔运算符,同时可直接在条件中使用运算结果。实操时可计算变量的平方并与数值比较,验证运算和判断的有效性。
(七)[[]] 模式匹配
双方括号[[ ]]是[]的增强版,支持字符串模式匹配(如== “通配符”),语法更灵活,无需担心部分符号转义问题,适合处理模糊匹配场景。实操时可匹配当前用户名,符合模式则输出特定问候语,否则输出默认提示。
二、知识框架体系(命令用途与参数用法)
- 基础结构类
if-then:基础条件判断,执行成功命令后触发对应语句,无额外参数,核心是依赖命令退出状态码判断。
if-then-else:二选一条件分支,在 if-then 基础上补充失败分支,语法固定为if 命令; then 成功语句; else 失败语句; fi。
elif:多条件分支判断,按顺序匹配条件,适合处理 3 种及以上场景,语法为if 条件1; then 语句1; elif 条件2; then 语句2; else 其他语句; fi。 - 条件检测类
test/[]:核心条件检测工具,参数分为三类:
数值比较:-gt(大于)、-lt(小于)、-eq(等于)、-ne(不等于)、-ge(大于等于)、-le(小于等于),仅支持整数运算。
字符串比较:=(相等)、!=(不相等)、-n(字符串非空)、-z(字符串为空),字符串比较需注意引号包裹变量避免空格问题。
文件检测:-e(文件 / 目录存在)、-d(是否为目录)、-f(是否为普通文件)、-r(是否可读)、-w(是否可写)、-x(是否可执行)。
&&/||:逻辑连接符,&&连接的条件需全部成立,||连接的条件至少一个成立,用于组合多个检测条件。 - 高级运算与匹配类
(( )):高级整数运算工具,支持+、-、、/、**(幂运算)、++、–等运算,可直接在条件中使用运算结果,无需额外转义。
[[ ]]:增强型条件检测,支持字符串模式匹配(如[[ $var == "test" ]]匹配以 test 开头的字符串),同时兼容[]的所有参数用法,语法更灵活。
三、Xshell 实操流程与结果说明 - 基础 if-then 实操
编写脚本定义 if-then 结构,分别执行pwd和不存在命令,运行后可见pwd执行成功时输出对应提示,不存在命令执行失败时无对应输出,验证基础分支逻辑。 - if-then-else 实操
编写脚本判断指定用户是否存在,运行后若用户存在则输出存在提示并查看相关文件,若不存在则输出不存在提示,清晰体现二选一的分支执行逻辑。 - elif 多分支实操
编写脚本判断当前登录用户名,匹配不同用户名输出不同提示,未匹配则输出默认内容,运行后可看到按顺序匹配条件并执行对应语句的效果。 - test/[] 条件检测实操
编写脚本定义变量进行数值比较,验证大于、不等于等判断结果;进行字符串比较,验证非空、空字符串及字符串大小的判断;检测家目录及文件状态,验证存在、目录、可写等状态的检测结果,运行后输出对应判断结论。 - 复合条件实操
编写脚本用&&同时检测目录存在和文件可写,用||检测目录存在或不存在文件,运行后可见&&需两个条件都满足才输出对应提示,||只要一个条件满足就输出对应提示。 - (()) 高级运算实操
编写脚本计算变量平方并与数值比较,运行后输出平方值及判断结果,验证幂运算和条件判断的有效性。 - [[]] 模式匹配实操
编写脚本匹配当前用户名,运行后若匹配成功则输出特定问候语,否则输出默认提示,验证模式匹配的功能。
四、实操注意事项
所有方括号[]、[[ ]]、(( ))前后必须加空格,否则会触发语法报错;变量赋值时等号两侧不能加空格;字符串比较时建议用双引号包裹变量,避免变量为空或包含空格时出现异常;数值比较仅支持整数,浮点运算需借助bc工具;[[ ]]的模式匹配仅支持通配符,不支持正则表达式;自定义命令作为判断条件时,需确保命令路径正确或已加入环境变量。


更多推荐




所有评论(0)