深入实践 Shell 脚本编程:高效自动化操作指南

news/2024/11/23 21:43:31/

一、什么是 Shell 脚本?

Shell 脚本是一种用 Shell 编写的脚本程序,用于执行一系列的命令。它是 Linux/Unix 系统中自动化管理任务的利器,能够显著提升工作效率,特别适合批量处理文件、监控系统状态、自动部署等任务。


二、Shell 脚本的基础语法

1. 脚本结构
  • Shebang 行:指定解释器路径。
    #!/bin/bash
    
  • 注释:以 # 开头的内容表示注释。
    # 这是一个注释
    
2. 变量
  • 定义变量
    NAME="Linux"
    
  • 使用变量
    echo "Welcome to $NAME"
    
  • 读取用户输入
    read USERNAME
    echo "Hello, $USERNAME"
    
3. 条件语句
  • if 结构
    if [ condition ]; thenecho "Condition met"
    elseecho "Condition not met"
    fi
    
  • 条件操作符
    • 文件判断:-e(存在)、-d(目录)、-f(文件)。
    • 数值比较:-eq(等于)、-gt(大于)、-lt(小于)。
    • 字符串比较:=(等于)、!=(不等)。
4. 循环
  • for 循环
    for i in {1..5}; doecho "Iteration $i"
    done
    
  • while 循环
    counter=1
    while [ $counter -le 5 ]; doecho "Count: $counter"((counter++))
    done
    
5. 函数
  • 定义函数
    my_function() {echo "This is a function"
    }
    
  • 调用函数
    my_function
    

三、Shell 脚本实战案例

1. 文件批量处理

需求:批量将 .log 文件重命名为带时间戳的文件名。

代码示例

#!/bin/bashfor file in *.log; dotimestamp=$(date +%Y%m%d_%H%M%S)mv "$file" "${file%.log}_$timestamp.log"echo "Renamed $file to ${file%.log}_$timestamp.log"
done

执行方法

  1. 保存为 rename_logs.sh
  2. 运行脚本:
    chmod +x rename_logs.sh
    ./rename_logs.sh
    

2. 系统监控脚本

需求:定时监控系统的 CPU 和内存使用情况。

代码示例

#!/bin/bashwhile true; doecho "CPU Usage: $(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')%"echo "Memory Usage: $(free -m | awk '/Mem:/ {printf "%.2f%%\n", $3/$2 * 100}')"sleep 5
done

执行方法

chmod +x monitor.sh
./monitor.sh

3. 自动备份脚本

需求:自动将指定目录下的文件压缩备份到 /backup 目录,并保留最近 7 天的备份。

代码示例

#!/bin/bashSOURCE_DIR="/path/to/source"
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" "$SOURCE_DIR"# 删除 7 天前的备份
find "$BACKUP_DIR" -type f -mtime +7 -exec rm -f {} \;
echo "Backup completed and old backups cleaned."

执行方法

chmod +x backup.sh
./backup.sh

4. 自动检测网络状态

需求:检测一组 IP 地址是否可达,并记录到日志文件。

代码示例

#!/bin/bashIP_LIST=("8.8.8.8" "1.1.1.1" "192.168.0.1")
LOG_FILE="network_status.log"for ip in "${IP_LIST[@]}"; doif ping -c 1 $ip > /dev/null 2>&1; thenecho "$(date): $ip is reachable" >> $LOG_FILEelseecho "$(date): $ip is unreachable" >> $LOG_FILEfi
done

执行方法

chmod +x check_network.sh
./check_network.sh

5. 用户管理脚本

需求:批量创建用户并设置默认密码。

代码示例

#!/bin/bashUSER_LIST=("user1" "user2" "user3")
DEFAULT_PASSWORD="password123"for user in "${USER_LIST[@]}"; doif id "$user" &>/dev/null; thenecho "User $user already exists."elseuseradd "$user"echo "$DEFAULT_PASSWORD" | passwd --stdin "$user"echo "User $user created with default password."fi
done

执行方法

sudo chmod +x create_users.sh
sudo ./create_users.sh

四、Shell 脚本调试与优化

1. 调试脚本
  • 开启调试模式:添加 set -x,逐行输出执行过程。
    set -x
    
  • 检查错误:使用 $? 检查上一条命令的执行结果。
2. 提高脚本效率
  • 使用 xargs 批量处理:
    ls *.log | xargs rm
    
  • 避免使用子进程,尽量用内建命令。
3. 增强可读性
  • 增加注释,解释每段代码的功能。
  • 使用函数组织代码逻辑。

五、Shell 脚本进阶技巧

1. 使用数组
  • 定义数组:
    my_array=("value1" "value2" "value3")
    
  • 遍历数组:
    for item in "${my_array[@]}"; doecho $item
    done
    
2. 使用正则表达式
  • 匹配字符串:
    if [[ $string =~ ^[0-9]+$ ]]; thenecho "This is a number."
    fi
    
3. 捕获信号
  • 捕获 Ctrl+C 信号并执行清理操作:
    trap "echo 'Interrupt signal received'; exit" SIGINT
    

六、Shell 脚本学习资源

1. 推荐书籍
  • 《Shell 编程技术》
  • 《Linux Shell 脚本攻略》
2. 在线资源
  • Linux Command
  • B 站 Shell 脚本入门教程。
3. 实践平台
  • 使用本地虚拟机(如 VirtualBox)或云服务器(如 AWS、Google Cloud)。

七、总结

Shell 脚本是 Linux 系统管理的重要工具,其简单、高效、灵活的特性使其在自动化操作中不可或缺。通过掌握基础语法和实战案例,你可以在工作中实现各种自动化任务,提升工作效率。

下一步实践

  1. 将上述案例改进为适应你的实际需求。
  2. 学习结合 awksed 编写更复杂的脚本。
  3. 使用定时任务(crontab)将脚本应用到生产环境。

http://www.ppmy.cn/news/1549374.html

相关文章

泷羽sec-星河飞雪-shell-2

免责声明 学习视频来自 B 站up主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 泷羽sec官网:http…

PHP 8.4 重磅发布了

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…

设计模式之 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将多个处理对象通过链式结构连接起来,形成一条处理请求的链条。每个处理对象都有机会处理请求,或者将请求传递给链中的下一个对象。这样&#x…

蓝桥杯某C语言算法题解决方案(质因数分解)

蓝桥杯原题:将一个正整数分解质因数例如:输入90,打印出90 2 * 3 * 3 * 5。 声明:该题目是否为蓝桥杯原题未知,我是从CSDN上面查到的,仅对该题目进行解决。 这个题与我之前发表过的一些关于检验一个数字是…

iOS无人直播虚拟视频实用版

iOS无人直播虚拟视频实用版 资源描述 本资源提供了一个名为“iOS无人直播虚拟视频实用版”的资源文件,该文件允许用户在iOS设备上实现无人直播功能,通过虚拟视频技术播放指定的视频内容。该资源文件特别适用于需要进行刷脸验证的场景,用户可…

windows已建立威胁IP排查

在应急响应的时候,需要筛选出服务器建立连接的进程、PID,此代码可满足该需求实现共计2步 首先windos netstat-ano > all.txt, 上传至pycharm路径 第一步获取服务器建立连接的ip import re# 从文件读取 netstat 输出 def read_netstat_f…

【Flask+Gunicorn+Nginx】部署目标检测模型API完整解决方案

【Ubuntu 22.04FlaskGunicornNginx】部署目标检测模型API完整解决方案 文章目录 1. 搭建深度学习环境1.1 下载Anaconda1.2 打包环境1.3 创建虚拟环境1.4 报错 2. 安装flask3. 安装gunicorn4. 安装Nginx4.1 安装前置依赖4.2 安装nginx4.3 常用命令 5. NginxGunicornFlask5.1 ng…

干货分享|分布式数据科学工具 Xorbits 的使用

本章介绍分布式数据科学工具 Xorbits 。 1 Xorbits Data Xorbits Data 是一个面向数据科学的分布式计算框架,功能类似于 Dask 和 Modin,用于加速 Pandas DataFrame 和 NumPy。Xorbits Data 通过切分大数据集并利用 Pandas 或 NumPy 执行操作。其底层采…