Linux下脚本是自动化任务与系统管理的利器,通过编写脚本可以大幅提升工作效率,减少重复操作,本文将详细介绍Linux脚本的基础概念、核心要素、实用技巧及常见应用场景,帮助读者快速掌握脚本编写技能。

脚本基础与执行
Linux脚本通常以.sh为扩展名,本质上是包含一系列Linux命令的文本文件,编写脚本需遵循特定规范:首行需声明解释器,如#!/bin/bash(使用Bash解释器)或#!/bin/sh(使用Bourne Shell),脚本文件需赋予可执行权限,通过chmod +x script.sh命令实现,执行方式有两种:直接输入./script.sh(需当前目录在PATH中)或使用bash script.sh(无需执行权限)。
核心语法要素
变量与赋值
脚本变量无需声明类型,直接通过name="value"格式赋值,使用时需加符号,如echo $name,只读变量通过readonly定义,常量建议使用大写字母命名。
条件判断
if-elif-else结构是条件判断的核心,支持-eq(等于)、-ne(不等于)、-gt(大于)等数值比较,以及(字符串等于)、(字符串不等于)等字符串操作,示例:
if [ $age -ge 18 ]; then
echo "成年人"
else
echo "未成年人"
fi
循环结构
for循环适用于遍历列表,如for i in {1..5}; do echo $i; done。while循环用于条件循环,常与read命令结合处理文件行:
while read line; do
echo $line
done < file.txt
函数定义
函数通过function_name() { commands; }定义,调用时直接写函数名,参数通过$1、$2等传递,表示参数个数,表示所有参数。

实用技巧与最佳实践
参数处理
脚本参数可通过位置变量获取,常用参数处理选项包括:
| 选项 | 说明 | 示例 |
|——|——|——|
| $1 | 第一个参数 | ./script.sh arg1 |
| $0 | 脚本名称 | echo $0 |
| | 上一条命令返回值 | if [ $? -eq 0 ]; then |
| | 脚本进程ID | echo "PID: $$" |
输入输出重定向
>覆盖输出,>>追加输出,<输入重定向。2>&1将错误输出重定向到标准输出,如command > output.log 2>&1。
调试方法
使用bash -x script.sh开启调试模式,显示每条命令的执行结果,在脚本中插入set -x和set +x可局部调试。
错误处理
通过set -e使脚本在命令失败时立即退出,set -u引用未定义变量时报错,增强脚本健壮性。
常见应用场景
系统监控
编写脚本监控CPU、内存使用率,例如通过top或vmstat命令收集数据并生成报告:

echo "CPU使用率:" >> monitor.log
top -bn1 | grep "Cpu(s)" | awk '{print $2}' >> monitor.log
文件批量处理
结合find和xargs实现文件批量操作,如将所有.log文件压缩为.tar.gz:
find . -name "*.log" -type f | xargs tar -czf logs.tar.gz
定时任务
通过crontab设置定时执行脚本,例如每天凌晨2点备份MySQL数据库:
0 2 * * * /path/to/backup.sh
自动化部署
编写脚本实现代码拉取、环境配置、服务重启等流程,适用于DevOps场景:
git pull origin main npm install pm2 restart app
进阶学习建议
掌握脚本编写后,可进一步学习正则表达式(grep、sed、awk)、进程管理(nohup、&)及系统调用(/proc文件系统),推荐阅读《Advanced Bash-Scripting Guide》和《Linux命令行与shell脚本编程大全》,结合实际项目练习,逐步提升脚本编写能力,良好的注释习惯和模块化设计是编写高质量脚本的关键,建议将复杂功能拆分为独立函数,便于维护与复用。


















