🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习
🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发
❄️作者主页:一个平凡而乐于分享的小比特的个人主页
✨收录专栏:自动化脚本语言,本专栏专门讲述一些常用的自动化脚本语言,以方便日常开发
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

Linux/Unix系统主流脚本语言--Bash语言
一、Shell脚本基础
1.1 Shell脚本基本结构
bash
#!/bin/bash
# 这是一个注释
# 脚本说明:自动化批处理脚本示例
# 脚本主体代码
echo "Hello, World!"
1.2 创建和执行脚本
bash
# 创建脚本文件
touch myscript.sh
# 添加执行权限
chmod +x myscript.sh
# 执行脚本
./myscript.sh
# 或
bash myscript.sh
二、Shell脚本核心语法
2.1 变量
bash
#!/bin/bash
# 变量定义和使用
NAME="Linux User"
AGE=25
echo "Name: $NAME"
echo "Age: $AGE"
# 只读变量
readonly PI=3.14
# 环境变量
echo "PATH: $PATH"
echo "HOME: $HOME"
# 特殊变量
echo "脚本名: $0"
echo "参数1: $1"
echo "参数个数: $#"
echo "所有参数: $@"
echo "退出状态: $?"
2.2 输入输出
bash
#!/bin/bash
# 标准输出
echo "This is output"
# 格式化输出
printf "Name: %s, Age: %d\n" "John" 25
# 读取输入
echo "请输入您的名字:"
read username
echo "你好, $username"
# 从文件读取
while read line; do
echo "行内容: $line"
done < input.txt
三、流程控制
3.1 条件判断
bash
#!/bin/bash
# if-else语句
if [ "$1" -gt 10 ]; then
echo "大于10"
elif [ "$1" -eq 10 ]; then
echo "等于10"
else
echo "小于10"
fi
# case语句
case $1 in
start)
echo "启动服务"
;;
stop)
echo "停止服务"
;;
restart)
echo "重启服务"
;;
*)
echo "用法: $0 {start|stop|restart}"
;;
esac
3.2 循环结构
bash
#!/bin/bash
# for循环
for i in {1..5}; do
echo "数字: $i"
done
for file in *.txt; do
echo "处理文件: $file"
done
# while循环
count=1
while [ $count -le 5 ]; do
echo "计数: $count"
((count++))
done
# until循环
num=1
until [ $num -gt 5 ]; do
echo "直到计数: $num"
((num++))
done
四、常用命令
4.1 文件和目录操作
bash
# 创建目录
mkdir -p /path/to/directory
# 复制文件
cp source.txt destination.txt
cp -r source_dir/ dest_dir/ # 递归复制目录
# 移动/重命名
mv old.txt new.txt
mv file.txt /path/to/destination/
# 删除
rm filename.txt
rm -rf directory/ # 强制递归删除
# 查看文件
cat file.txt
less file.txt
head -n 10 file.txt
tail -n 20 file.txt
tail -f logfile.log # 实时查看日志
# 查找文件
find /path -name "*.txt"
find . -type f -size +10M
4.2 文本处理
bash
# grep搜索
grep "pattern" file.txt
grep -r "pattern" directory/ # 递归搜索
grep -i "pattern" file.txt # 忽略大小写
grep -v "pattern" file.txt # 反向匹配
# sed流编辑器
sed 's/old/new/g' file.txt # 替换
sed '/pattern/d' file.txt # 删除匹配行
sed -n '10,20p' file.txt # 打印10-20行
# awk文本分析
awk '{print $1}' file.txt # 打印第一列
awk -F',' '{print $2}' file.csv # 指定分隔符
awk '$3 > 100 {print $0}' data.txt # 条件筛选
4.3 系统管理
bash
# 进程管理
ps aux | grep process_name
top -u username
kill -9 PID
pkill process_name
# 磁盘空间
df -h
du -sh directory/
du -h --max-depth=1
# 系统信息
uname -a
cat /etc/os-release
free -h
uptime
# 用户管理
whoami
id username
last
五、实用脚本示例
5.1 备份脚本
bash
#!/bin/bash
# 备份脚本
BACKUP_DIR="/backup"
SOURCE_DIR="/data"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="backup_$DATE.tar.gz"
echo "开始备份..."
tar -czf "$BACKUP_DIR/$BACKUP_FILE" "$SOURCE_DIR"
if [ $? -eq 0 ]; then
echo "备份成功: $BACKUP_FILE"
# 删除7天前的备份
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete
else
echo "备份失败"
exit 1
fi
5.2 日志监控脚本
bash
#!/bin/bash
# 监控日志错误
LOG_FILE="/var/log/app.log"
ERROR_KEYWORDS=("ERROR" "CRITICAL" "FAILED")
ALERT_EMAIL="admin@example.com"
check_errors() {
for keyword in "${ERROR_KEYWORDS[@]}"; do
count=$(grep -c "$keyword" "$LOG_FILE")
if [ $count -gt 0 ]; then
echo "发现 $count 个 $keyword 错误" | mail -s "系统警报" "$ALERT_EMAIL"
# 提取错误详情
grep "$keyword" "$LOG_FILE" | tail -5 > /tmp/last_errors.txt
fi
done
}
# 定期检查
while true; do
check_errors
sleep 300 # 5分钟检查一次
done
5.3 批量文件处理
bash
#!/bin/bash
# 批量重命名和转换
INPUT_DIR="./images"
OUTPUT_DIR="./converted"
mkdir -p "$OUTPUT_DIR"
for img in "$INPUT_DIR"/*.jpg; do
if [ -f "$img" ]; then
filename=$(basename "$img" .jpg)
# 转换并调整大小
convert "$img" -resize 800x600 "$OUTPUT_DIR/${filename}_resized.jpg"
echo "已处理: $filename"
fi
done
echo "批量处理完成"
六、脚本调试和优化
6.1 调试技巧
bash
#!/bin/bash
# 调试选项
set -x # 显示执行的命令
set -e # 遇到错误立即退出
set -u # 使用未定义变量时报错
# 或执行时启用
bash -x script.sh
6.2 错误处理
bash
#!/bin/bash
# 错误处理示例
cleanup() {
echo "清理临时文件..."
rm -f /tmp/temp_*
echo "脚本退出"
}
# 捕获退出信号
trap cleanup EXIT
# 函数错误处理
process_file() {
local file=$1
if [ ! -f "$file" ]; then
echo "错误: 文件不存在 - $file" >&2
return 1
fi
# 处理逻辑
}
# 主程序
main() {
process_file "$1" || exit 1
# 其他逻辑
}
七、最佳实践
-
添加文档头
bash#!/bin/bash # 脚本名称: backup.sh # 作者: Your Name # 版本: 1.0 # 描述: 用于系统备份 # 用法: ./backup.sh [选项] -
使用函数模块化
-
添加日志记录
-
参数验证
-
添加帮助功能
-
使用配置文件
-
定期维护和更新
八、学习资源推荐
- 官方文档: GNU Bash手册
- 在线教程 :
- Linux Shell Scripting Tutorial
- Bash Academy
- 参考书籍 :
- 《Linux命令行与shell脚本编程大全》
- 《Bash Cookbook》
通过掌握这些基础知识和常用命令,你可以编写出功能强大、稳定可靠的自动化批处理脚本,大大提高Linux系统管理效率。