当前位置: 首页 > news >正文

Linux Shell 脚本编程极简入门指南

一、学习前提准备

环境要求

  • Linux系统(Ubuntu/CentOS等)或 WSL (Windows用户)

  • 任意文本编辑器(推荐VSCode/Vim)

  • 基础命令行操作能力

🔍 验证环境

# 查看系统默认Shell
echo $SHELL
# 查看Bash版本
bash --version 

二、Shell脚本基础认知

2.1 什么是Shell脚本?

  • 解释型语言:通过/bin/bash逐行解析执行

  • 核心价值

    • 自动化重复性系统操作(80%运维工作可脚本化)

    • 快速实现任务调度(结合cron)

    • 提升操作可重复性和精确度

2.2 脚本文件标准结构

#!/bin/bash           # Shebang声明(必须第1行)
# 文件:demo.sh        # 脚本描述
# 作者:CSDN用户       # 维护信息
​
echo "欢迎学习Shell编程"   # 可执行语句

三、首个Shell脚本实战

3.1 创建并运行脚本

# 创建脚本文件(建议.sh后缀)
touch hello_world.sh  
chmod +x hello_world.sh  # 添加执行权限

3.2 编辑器输入以下代码

#!/bin/bash
# 第一个Shell程序
echo "当前用户:$(whoami)"
echo "系统时间:$(date +%F)"

3.3 三种执行方式对比

执行方式命令示例适用场景
路径直接执行./hello_world.sh已添加执行权限时
指定解释器执行bash hello_world.sh调试快速执行
source命令执行source hello_world.sh需保留环境变量时

四、核心编程语法精要

4.1 变量操作

company="CSDN社区"          # 定义变量(等号无空格)
readonly version="1.0"     # 只读变量(不可修改)
today=$(date +%Y-%m-%d)    # 命令执行结果赋值
echo "${company} ${today}" # 建议变量用花括号包裹

4.2 条件分支结构

if [ -f "/etc/passwd" ]; then     # 判断文件存在
  echo "系统密码文件存在"
elif [ -d "/tmp" ]; then          # 判断目录存在
  echo "/tmp目录存在"
else
  echo "条件未满足"
fi

4.3 循环结构

for循环处理文件列表:

for file in *.log; do
  echo "正在处理日志文件:${file}"
done

while按行读取文件:

while read line; do
  echo "当前行:$line"
done < input.txt

4.4 函数定义与调用

# 带返回值函数
file_exists() {
  [ -f "$1" ] && return 0 || return 1
}
​
# 调用函数
file_exists /etc/hosts
if [ $? -eq 0 ]; then    # $?获取上一条命令返回值
  echo "文件存在"
fi

五、实用功能模块速查

5.1 参数传递处理

特殊变量含义示例
$0脚本名称echo "脚本:$0"
$1-$9第1-9个位置参数echo "第1参数:$1"
$#参数总个数if [ $# -gt 0 ]
$@所有参数列表for param in $@

5.2 退出状态码

check_service() {
  systemctl is-active nginx >/dev/null
  return $?   # 返回上条命令的退出状态
}
​
check_service
case $? in
  0) echo "服务运行中";;
  *) echo "服务异常,状态码:$?";;
esac

5.3 管道与重定向

# 管道组合命令
cat access.log | grep "404" | awk '{print $7}'
​
# 输出重定向
ls -l > file_list.txt    # 覆盖写入
echo "新增内容" >> log.txt # 追加写入
​
# 错误输出处理
apt update 2> /dev/null  # 丢弃错误输出

六、自动化实战:系统备份脚本

6.1 需求说明

  • 每日凌晨压缩备份/data目录

  • 自动删除30天前的备份文件

  • 记录操作日志

6.2 完整代码实现

#!/bin/bash
# 自动化备份脚本
​
# 配置参数
backup_dir="/data"
dest_path="/backup"
keep_days=30
log_file="/var/log/backup.log"
​
# 目录检查
[ ! -d "$dest_path" ] && mkdir -p "$dest_path"
[ ! -f "$log_file" ] && touch "$log_file"
​
# 生成压缩包
timestamp=$(date +%Y%m%d%H%M)
tar -czf "${dest_path}/backup_${timestamp}.tar.gz" "$backup_dir" 2>&1 | tee -a "$log_file"
​
# 清理旧备份
find "$dest_path" -name "*.tar.gz" -mtime +$keep_days -delete 2>&1 | tee -a "$log_file"
​
# 日志记录
echo "[$(date)] 备份完成,保留最近${keep_days}天文件" | tee -a "$log_file"

6.3 部署到cron计划任务

# 每日凌晨2点执行
crontab -e
# 添加如下行
0 2 * * * /opt/scripts/backup.sh

七、高阶调试技巧

7.1 执行过程追踪

bash -x script.sh  # 显示每条执行命令

7.2 代码段调试

set -x   # 开启调试模式
# 需要调试的代码
set +x   # 关闭调试模式

7.3 错误自动退出

#!/bin/bash
set -e   # 任何语句返回值非0则立即退出
set -o pipefail  # 管道命令出错时也退出

八、学习路线与资源推荐

🔥 技能提升路线

  1. 掌握正则表达式(grep/sed)

  2. 学习awk高级文本处理

  3. 理解Linux信号处理(trap)

  4. 研究Ansible等自动化工具

📚 推荐资料

  • 书籍:《Linux命令行与Shell脚本编程大全》

  • 工具:ShellCheck在线检测

相关文章:

  • 服务器数据恢复—预防服务器故障,搞定服务器故障数据恢复
  • BT-Basic函数之首字母D
  • git commit messege 模板设置 (规范化管理git)
  • Python学习第十二天
  • 大模型在甲状腺癌诊疗全流程预测及方案制定中的应用研究
  • 台风信息查询API:数据赋能,守护安全
  • css中的浮动
  • 【QT5 Widgets示例】记事本:(三)功能实现
  • 2012. 数组美丽值求和【动态规划】
  • 学习threejs,使用LatheGeometry旋转体(榫卯体)几何体
  • texstudio: 编辑器显示行号+给PDF增加行号
  • 大数据实时分析:ClickHouse、Doris、TiDB 对比分析
  • 力扣-数组-34 在排序数组中查找元素的第一个和最后一个位置
  • 代码随想录|二叉树|07二叉树周末总结
  • 使用 Miniforge3 管理 Python 环境的详细指南(基于最新实践和时效性信息,截至 2025 年)
  • ArcGIS Pro 行政区划数据处理:拆分与提取方法详解
  • 修改桌面图标——操作系统程序图标(Windows 10)
  • 2024年广州市智能网联汽车创新实践年度报告
  • 583. 两个字符串的删除操作
  • 【数据库系统概论】第十一章 并发控制
  • 上海乐高乐园度假区将于7月5日开园
  • 蓝佛安:中方将采取更加积极有为的宏观政策,有信心实现今年5%左右增长目标
  • 马上评|从一个细节看今年五一档电影
  • 抗战回望19︱《中国工程师学会四川考察团报告》:“将来重工业所在,以四川为最适宜之地点”
  • 李翔宁:城市的每个人都参与了上海的建造,这一过程还在持续
  • 什么让翻拍“语文”成为短视频新风潮