shell脚本编程部分的一课一得

张开发
2026/6/11 13:36:20 15 分钟阅读
shell脚本编程部分的一课一得
前言在 Linux 生态中Shell 脚本是运维开发、自动化部署、批量任务处理的核心基石也是每一位 Linux 从业者必须掌握的入门级核心技能。通过本次 Shell 脚本编程课程的系统学习与全流程实操练习我完成了从 “只会敲单行命令” 到 “能独立编写自动化脚本解决实际问题” 的跨越。本文将从核心认知梳理、核心语法与实操重点、实战案例落地、新手踩坑避坑指南、学习心得总结五个维度完成本次课程的一课一得复盘也为同样入门 Shell 的同学提供一份可直接落地的学习参考。一、核心认知Shell 脚本到底是什么我们为什么要学它1.1 Shell 与 Shell 脚本的本质Shell 是 Linux 系统中用户与内核之间的命令解释器相当于用户操作 Linux 系统的 “翻译官”而 Shell 脚本就是将一系列 Shell 命令按照业务逻辑、流程控制组合起来的可执行文本文件实现命令的批量化、自动化执行。本次课程我们以 Linux 系统默认的BashBourne-Again Shell为核心学习对象它兼容 sh 语法拥有丰富的功能和极强的扩展性是企业生产环境中使用最广泛的 Shell 解释器。1.2 学习 Shell 脚本的核心价值解放重复劳动批量创建用户、批量修改文件权限、定时清理日志等重复操作无需逐行敲命令一个脚本一键完成运维自动化基石服务部署、环境初始化、系统监控告警、数据备份等几乎所有 Linux 自动化场景都离不开 Shell 脚本的支撑轻量无依赖Linux 系统原生自带 Bash 环境无需安装任何额外依赖开箱即用跨平台兼容性极强全场景粘合剂能无缝对接 Linux 系统命令、Python/Java 等应用程序、MySQL/Redis 等数据库、云平台 API是自动化流程的 “万能连接器”1.3 脚本入门必备脚本规范与执行方式一个标准的 Shell 脚本开头必须指定解释器格式为#!/bin/bash它会告诉系统用哪个解释器来执行脚本内容。Shell 脚本有 3 种核心执行方式也是课程入门的第一个实操重点表格执行方式操作命令核心特点适用场景权限执行chmod x test.sh ./test.sh需赋予执行权限开启子 Shell 执行生产环境标准执行方式解释器直接执行bash test.sh/sh test.sh无需执行权限开启子 Shell 执行调试脚本、无执行权限场景source / 点执行source test.sh/. test.sh在当前 Shell 执行会修改当前环境变量加载环境变量、配置生效场景二、核心语法与实操重点Shell 脚本的核心知识点梳理Shell 脚本的语法并不复杂核心是围绕 “变量、条件判断、循环、函数、管道与重定向” 五大模块以下是本次课程学习的核心知识点与实操示例。2.1 变量Shell 脚本的数据基础Shell 变量分为 4 大类是所有脚本逻辑的基础其中变量定义时等号两边绝对不能有空格是新手入门的第一个核心避坑点。1自定义变量用于脚本内自定义数据调用时通过$变量名或${变量名}推荐可明确变量边界取值。bash运行#!/bin/bash # 变量定义 NAMEShell学习 COURSE_DAYS7 # 变量调用 echo 课程名称${NAME} echo 课程时长${COURSE_DAYS}天2环境变量系统预设的全局变量在整个 Shell 环境中都生效常用的有$PATH命令搜索路径、$HOME用户家目录、$USER当前用户、$PWD当前目录可通过env命令查看所有环境变量通过export将自定义变量导出为环境变量。bash运行# 临时添加环境变量将自定义路径加入系统命令搜索路径 export MY_BIN/opt/myapp/bin export PATH$PATH:$MY_BIN # 查看是否生效 echo $PATH3位置参数变量用于脚本接收外部传入的参数是脚本实现动态传参的核心$0脚本本身的名称$1~$n第 1~ 第 n 个传入的参数$#传入参数的总个数$/$*所有传入的参数循环中$逐个遍历$*作为一个整体实操示例bash运行#!/bin/bash # 新建test_arg.sh测试位置参数 echo 脚本名称$0 echo 第一个参数$1 echo 第二个参数$2 echo 参数总个数$# echo 所有参数列表$执行命令bash test_arg.sh hello world即可看到参数的接收效果。4预定义变量Shell 预设的特殊变量用于获取脚本执行状态最核心的是$?上一条命令的执行返回值0代表执行成功非 0 代表执行失败是脚本中判断命令是否正常执行的核心依据。bash运行#!/bin/bash # 测试命令执行状态 ls /etc/passwd if [ $? -eq 0 ];then echo 命令执行成功文件存在 else echo 命令执行失败文件不存在 fi2.2 条件判断让脚本拥有 “逻辑判断能力”条件判断是脚本实现分支逻辑的核心Shell 中通过test命令或[]推荐、[[]]实现判断核心规则[] 内的判断内容前后必须有空格。1常用判断类型表格判断类型核心运算符说明整数判断-eq/-ne/-gt/-lt/-ge/-le等于 / 不等于 / 大于 / 小于 / 大于等于 / 小于等于字符串判断/!/-z/-n等于 / 不等于 / 空字符串 / 非空字符串文件 / 目录判断-e/-f/-d/-x/-s存在 / 普通文件 / 目录 / 有执行权限 / 文件非空2if 条件语句实操分为单分支、双分支、多分支是最常用的条件判断语法bash运行#!/bin/bash # 多分支判断检测文件类型 FILE/etc/passwd if [ ! -e ${FILE} ];then echo 文件${FILE}不存在 elif [ -d ${FILE} ];then echo ${FILE}是一个目录 elif [ -f ${FILE} ];then echo ${FILE}是一个普通文件 else echo ${FILE}是其他类型文件 fi3case 语句实操适合多值匹配场景比 if 多分支更简洁常用于服务启动脚本、参数匹配场景bash运行#!/bin/bash # 服务启停脚本示例 case $1 in start) echo 服务启动中... ;; stop) echo 服务停止中... ;; restart) echo 服务重启中... ;; *) echo 用法$0 start|stop|restart ;; esac2.3 循环语句实现批量自动化处理循环是 Shell 实现批量操作的核心本次课程重点学习了for、while两种最常用的循环。1for 循环适合已知循环次数的场景常用于遍历列表、数字、文件实现批量操作实操示例批量创建 10 个系统用户bash运行#!/bin/bash # 批量创建用户脚本 for i in {1..10} do usernametest_user${i} # 创建用户设置默认密码123456屏蔽输出 useradd ${username} echo 123456 | passwd --stdin ${username} /dev/null # 判断创建结果 if [ $? -eq 0 ];then echo 用户${username}创建成功 else echo 用户${username}创建失败 fi done2while 循环适合条件满足时循环的场景常用于读取文件内容、无限循环监控实操示例逐行读取系统配置文件bash运行#!/bin/bash # 逐行读取/etc/passwd文件 while read line do echo 读取到行内容${line} done /etc/passwd2.4 函数实现代码复用与模块化Shell 函数可以将重复的代码块封装提高脚本的可读性和复用性支持传入参数和返回值。bash运行#!/bin/bash # 定义函数检测文件是否存在 check_file() { # local定义局部变量仅在函数内生效避免全局变量污染 local FILE_NAME$1 if [ -e ${FILE_NAME} ];then echo 文件${FILE_NAME}存在 return 0 else echo 文件${FILE_NAME}不存在 return 1 fi } # 调用函数传入参数 check_file /etc/passwd check_file /etc/test_not_exist.txt

更多文章