news 2026/8/25 13:47:58

Shell脚本零基础通关教程|条件语句+函数+全类型循环(企业实战+面试真题)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell脚本零基础通关教程|条件语句+函数+全类型循环(企业实战+面试真题)

Shell脚本零基础通关教程|条件语句+函数+全类型循环(企业实战+面试真题)

📌博客简介:Shell脚本是Linux运维、自动化部署、面试的核心必考技能!很多新手学不懂Shell,核心是没有系统掌握条件判断、函数、各类循环语法。本文整合全套Shell核心语法,包含if/case条件、shell函数、while/until/for/select四大循环,搭配超多可直接运行案例、企业生产实战、面试真题,零基础一键吃透!

适用人群:Linux新手、运维工程师、后端开发、校招面试、自动化学习

核心知识点:if多分支判断、case匹配语句、Shell函数、while/until循环、for/select菜单循环、企业自动化实战

全文特点:无废话干货、语法+图解、零基础易懂、代码可直接复制运行

一、Shell脚本整体知识框架

Shell脚本核心语法分为条件语句、函数、循环语句三大模块,各司其职:

  • 条件语句:if(通用多判断)、case(固定值匹配,服务脚本专用)

  • 函数:代码复用、模块化开发,精简脚本、方便维护

  • 循环语句:while(守护进程)、until(条件终止)、for(有限次数遍历)、select(交互式菜单)

二、if条件语句(最常用条件判断)

if语句是Shell中使用频率最高的条件语句,适用于所有场景的逻辑判断,支持单分支、双分支、多分支嵌套,语法灵活、通用性极强。

2.1 五大条件表达式语法

if的判断条件支持5种写法,日常任选其一即可,推荐[](())极简写法

# 1.test表达式iftest表达式;then指令;fi# 2.[] 字符串/普通判断(最常用)if[条件];then指令;fi# 3.[[]] 高级判断(支持正则、逻辑运算)if[[条件]];then指令;fi# 4.(()) 算术判断(纯数字比较专用)if((算术表达式));then指令;fi# 5.命令直接作为条件if命令;then指令;fi

2.2 三大分支语法结构

1)单分支(满足条件执行,不满足跳过)
if<条件表达式>;then指令fi

实战场景:文件夹不存在则创建

if[!-d/tmp/test];thenmkdir/tmp/testfi
2)双分支(二选一执行)
if<条件表达式>;then指令集1# 条件成立执行else指令集2# 条件不成立执行fi
3)多分支(多条件匹配)
if<条件1>;then指令1elif<条件2>;then指令2elif<条件3>;then指令3else默认指令fi

2.3 企业实战案例:sshd服务管控脚本

通过传参实现服务启动、停止、重启、状态查询,工作高频复用脚本

#!/bin/bashif["$1"=="start"];thensystemctl start sshdelif["$1"=="stop"];thensystemctl stop sshdelif["$1"=="status"];thensystemctl status sshdelif["$1"=="restart"];thensystemctl restart sshdelseecho"Usage:$0start|stop|status|restart "fi

三、case条件语句(固定值匹配专用)

case语句是多分支if的精简版,专门用于固定字符串/数字匹配,语法工整、可读性强,常用于系统服务启动脚本,是企业服务脚本标配语法。

3.1 核心语法

case"变量值"in值1)指令1;;值2)指令2;;*)默认指令# 匹配失败执行;;esac

核心特点:匹配成功执行对应指令,;;结束当前分支,*)兜底匹配,等价于else。

3.2 经典实战案例

1)数字选择判断
#!/bin/bashread-p"请输入1-3的数字: "numcase$numin1)echo"您输入的数字是:$num";;2)echo"您输入的数字是:$num";;3)echo"您输入的数字是:$num";;*)echo"请输入1-3之间的有效数字!";;esac
2)企业级sshd服务脚本(最简版)
#!/bin/bashcase$1instart|stop|restart|reload|status)systemctl$1sshd;;*)echo"Usage:$0start|stop|restart|reload|status";;esac
3)终端彩色输出脚本
#!/bin/bashcase$1inPASS)echo-e'\033[1;32mPASS\033[0;39m';;FAIL)echo-e'\033[1;31mFAIL\033[0;39m';;DONE)echo-e'\033[1;35mDONE\033[0;39m';;*)echo"Usage:$0PASS|FAIL|DONE";;esac

3.3 if与case使用场景区别

  • if:通用性强,支持数值比较、范围判断、复杂逻辑,适用所有场景

  • case:仅适配固定离散值(start/stop/数字),代码更规范,专属服务脚本

四、Shell函数(代码复用模块化)

函数的核心作用:封装重复代码、实现模块化、精简脚本、便于维护,一次定义、多次调用,是高级Shell脚本必备语法。

4.1 三种函数语法

# 标准写法function函数名(){指令returnn}# 简化写法1(省略括号)function函数名{指令returnn}# 简化写法2(省略function)函数名 (){指令returnn}

4.2 函数核心规则(必记)

  • 函数必须先定义、后调用,否则报 command not found

  • 调用函数直接写函数名,无需加括号

  • return:退出函数;exit:退出整个脚本

  • local:定义函数局部变量,仅函数内部生效

  • 执行优先级:系统别名 > 函数 > 系统命令 > 可执行文件

4.3 基础实战案例

#!/bin/bash# 定义函数functionhello(){echo"Hello World !"}# 调用函数hello

五、while与until循环(无限/条件循环)

while和until属于条件循环,主打无限循环、守护进程、定时监测,是运维后台常驻脚本的核心语法。

5.1 核心区别

  • while(当型循环):条件为真,持续循环;条件为假,退出循环(可能一次不执行)

  • until(直到型循环):条件为假,持续循环;条件为真,退出循环

5.2 标准语法

# while语法while[条件]do循环体done# until语法until[条件]do循环体done

5.3 基础案例:降序打印5-1

# while实现#!/bin/bashi=5while((i>0))doecho$i((i--))done# until实现#!/bin/bashi=5until((i==0))doecho$i((i--))done

5.4 企业生产实战

1)每2秒监控系统负载(守护进程)
#!/bin/bash# 无限循环打印系统负载,后台运行常驻监控whiletruedouptime>>/tmp/loadaverage.logsleep2done
2)5秒监测sshd服务,异常自动重启
#!/bin/bashwhiletruedosystemctl is-active sshd.service&>/dev/nullif[$?-ne0];thensystemctl restart sshd.service&>/dev/nullfisleep5done

5.5 脚本后台运行必备命令

  • 脚本名&:后台运行脚本

  • nohup 脚本名&:后台永久运行,关闭终端不中断

  • ctrl+z:暂停任务、bg:放入后台、fg:切回前台

  • jobs:查看后台任务、kill %任务号:关闭后台脚本

六、for与select循环(遍历/菜单循环)

for循环主打有限次数遍历,是日常脚本最常用循环;select主打交互式菜单选择,用于自定义交互脚本。

6.1 for循环两种语法

1)变量取值型(遍历列表)
for变量名in取值列表do指令done

支持{1..5}$(seq 1 5)取值,适合批量遍历操作

2)C语言型(规范次数循环)
for((i=1;i<=5;i++))do指令done

6.2 for循环经典案例

1)升降序打印数字
# 升序 1-5foriin{1..5};doecho$i;done# 降序 5-1foriin{5..1};doecho$i;done
2)九九乘法表(面试必考)
#!/bin/bashfornum1in{1..9}dofor((num2=1;num2<=num1;num2++))doecho-en"$num2*$num1=$[ num2 * num1 ]\t"doneechodone
3)企业批量运维脚本
# 批量设置服务开机自启#!/bin/bashforserviceincrond atd chronyddosystemctlenable$servicedone# 批量扫描局域网在线主机(并发优化)#!/bin/shforiin`seq1254`do{ping-c210.1.8.$i&>/dev/nullif[$?-eq0];thenecho"10.1.8.$iis online">>node_online.txtelseecho"10.1.8.$iis offline">>node_offline.txtfi}&donewait

6.3 select交互式菜单循环

select是无限交互式菜单循环,用户输入序号选择功能,无主动退出逻辑,需配合exit终止。

核心语法
select变量名in菜单列表do指令done
实战:自定义课程选择菜单
#!/bin/bashPS3="请选择你的课程:"# 自定义提示符selectcourseinlinux mysql pythonexitdoecho"你选择了第$REPLY个课程"case$courseinlinux)echo"选择课程:Linux运维";;mysql)echo"选择课程:MySQL数据库";;python)echo"选择课程:Python开发";;exit)exit;;esacechodone

核心变量:PS3(自定义提示符)、REPLY(获取用户输入序号)

七、Shell全语法场景终极总结

语法模块核心适用场景
if条件语句通用所有逻辑判断、范围比较、多条件分支
case语句固定值匹配、系统服务启停脚本、代码规范化
Shell函数重复代码封装、脚本模块化、精简维护
while循环守护进程、后台常驻监测、无限循环任务
until循环条件终止型循环,场景与while互补
for循环有限次数遍历、批量操作、文件处理、批量运维
select循环交互式菜单制作、用户选择型脚本

八、新手高频避坑指南

  • if/case/循环语句必须成对结束(fi/esac/done),缺一直接报错

  • 函数必须先定义后调用,否则识别为未知命令

  • while无限循环必须加sleep,避免占用100%CPU资源

  • select无自动退出,必须搭配exit实现终止

  • 批量扫描脚本添加&实现并发,大幅提升执行效率

💡 点赞+收藏!全网最全Shell零基础通关手册,覆盖入门+实战+面试,持续更新运维自动化案例!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/25 13:47:28

驱动二阶段——设备驱动

一、linux 字符设备驱动框架1.1linux基本驱动框架分类字符设备是流式的&#xff0c;如键盘、串口。块设备是存储式的&#xff0c;如硬盘、U盘。网络设备是通讯式的&#xff0c;如网卡&#xff0c;通过Socket访问。在/dev目录下使用ls -l查看设备的具体类型信息linux驱动模块的基…

作者头像 李华
网站建设 2026/8/25 13:44:59

PHP报名系统源码一出,人工报名直接变废纸

“基于 PHP - Mysql 框架的网络报名系统开发”, 这个资源所描述的是一个借助 PHP MySQL 框架搭建而成的网络报名系统, 它主要是用来处理等级考试&#xff08;就像计算机等级考试那样&#xff09;的在线报名流程的, 该系统的目的在于解决传统人工报名方式所带来的工作量巨大、容…

作者头像 李华
网站建设 2026/8/25 13:43:22

刘二大人深度学习实践笔记--梯度下降算法

目录 梯度下降算法&#xff08;GD&#xff09; 代码 随机梯度下降算法 &#xff08;SGD&#xff09; 代码 批量梯度下降算法&#xff08;MBGD&#xff09; 在寻找loss最低的权重时&#xff0c;之前使用穷举法&#xff0c;但是如果模型中有多个需要确定的参数&#xff0c;会…

作者头像 李华
网站建设 2026/8/25 13:38:35

Agent系列

开篇&#xff1a;行业不景气&#xff0c;一个普通程序员决定把会的东西全写出来&#xff08;附 42 篇系列目录&#xff09;CSDN 承接版 2026-08-23 同步发抖音/小红书图文&#xff08;卡片版&#xff09;&#xff1b;本篇是 CSDN 专栏的第一篇 四个免费专栏的开篇说明先交代…

作者头像 李华
网站建设 2026/8/25 13:33:36

跨设备剪贴板共享工程化笔记:可读代码与可复现页面并行推进

手机剪贴板与设备粘贴演示&#xff1a;从输入到历史记录的完整交互 写在前面 很多人第一次看到“跨设备剪贴板”这样的页面标题时&#xff0c;会自然联想到系统级剪贴板、设备发现、账号同步和真正的跨设备传输。不过&#xff0c;判断一个页面能做什么&#xff0c;不能只看标题…

作者头像 李华
网站建设 2026/8/25 13:24:57

模板小程序、SaaS商城和定制开发有什么区别?费用和交付边界对比

模板小程序、SaaS商城和定制开发有什么区别&#xff1f;费用和交付边界对比模板小程序、SaaS商城和定制开发的区别&#xff0c;主要在交付方式和维护责任。模板偏页面和快速搭建&#xff0c;SaaS商城偏成熟后台和年费制使用&#xff0c;定制开发偏复杂功能、源码、接口和私有化…

作者头像 李华