本文目录导读:

我来详细介绍Shell脚本实现批处理的几种常见方式:
基础批处理结构
循环处理文件
#!/bin/bash
# 批量处理当前目录下所有.txt文件
for file in *.txt; do
echo "处理文件: $file"
# 执行处理操作,
wc -l "$file" > "${file%.txt}_统计.txt"
done
批量处理指定文件列表
#!/bin/bash
# 批量处理多个文件
for file in file1.txt file2.txt file3.txt; do
if [ -f "$file" ]; then
echo "正在处理: $file"
# 添加你的处理命令
cat "$file" | grep "keyword" > "output_$file"
fi
done
文件重命名批处理
#!/bin/bash
# 批量重命名:将.jpg改为.png
for file in *.jpg; do
if [ -f "$file" ]; then
mv "$file" "${file%.jpg}.png"
echo "重命名: $file -> ${file%.jpg}.png"
fi
done
# 添加前缀/后缀
for file in *.txt; do
mv "$file" "prefix_$file"
# 或添加后缀:mv "$file" "${file%.txt}_suffix.txt"
done
文本处理批处理
#!/bin/bash
# 批量替换文件内容
for file in *.config; do
sed -i 's/old_value/new_value/g' "$file"
echo "已修改: $file"
done
# 批量提取数据
for file in *.log; do
# 提取错误信息
grep "ERROR\|FATAL" "$file" > "error_$file"
# 统计行数
wc -l "$file" >> summary.txt
done
目录操作批处理
#!/bin/bash
# 批量创建目录
for i in {1..10}; do
mkdir -p "project_$i"/{src,docs,tests}
echo "创建目录: project_$i"
done
# 批量处理子目录
for dir in */; do
if [ -d "$dir" ]; then
cd "$dir"
echo "进入目录: $dir"
# 执行某个命令
make clean
cd ..
fi
done
使用find命令批处理
#!/bin/bash
# 查找并批量删除.tmp文件
find . -name "*.tmp" -type f -exec rm {} \;
# 查找并批量修改权限
find . -type f -name "*.sh" -exec chmod +x {} \;
# 查找并批量处理
find /data -name "*.log" -mtime +7 -type f | while read file; do
echo "压缩旧日志: $file"
gzip "$file"
done
带参数批处理脚本
#!/bin/bash
# 批量处理脚本,支持参数
usage() {
echo "用法: $0 [-d directory] [-p pattern] [-a action]"
echo " -d: 目标目录"
echo " -p: 文件匹配模式"
echo " -a: 操作类型 (rename, backup, delete)"
exit 1
}
while getopts "d:p:a:" opt; do
case $opt in
d) DIRECTORY="$OPTARG" ;;
p) PATTERN="$OPTARG" ;;
a) ACTION="$OPTARG" ;;
*) usage ;;
esac
done
if [ -z "$DIRECTORY" ] || [ -z "$PATTERN" ] || [ -z "$ACTION" ]; then
usage
fi
cd "$DIRECTORY" || exit 1
case $ACTION in
rename)
for file in $PATTERN; do
mv "$file" "backup_$file"
done
;;
backup)
mkdir -p backup
cp $PATTERN backup/
;;
delete)
read -p "确认删除这些文件? [y/N] " confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
rm $PATTERN
fi
;;
*)
echo "未知操作"
exit 1
;;
esac
并行处理示例
#!/bin/bash
# 并行处理多个文件
process_file() {
local file="$1"
echo "处理: $file (PID: $$)"
sleep 2 # 模拟处理时间
echo "$file 处理完成"
}
# 并行执行
for file in *.txt; do
process_file "$file" &
done
# 等待所有后台进程完成
wait
echo "所有文件处理完成"
实战案例:日志分析批处理
#!/bin/bash
# 批量日志分析脚本
LOG_DIR="/var/log"
REPORT_DIR="./reports"
mkdir -p "$REPORT_DIR"
analyze_log() {
local logfile="$1"
local basename=$(basename "$logfile")
echo "分析: $logfile"
# 统计不同级别的日志
echo "=== $basename 分析报告 ===" > "$REPORT_DIR/${basename}_report.txt"
echo "ERROR数量: $(grep -c 'ERROR' "$logfile")" >> "$REPORT_DIR/${basename}_report.txt"
echo "WARN数量: $(grep -c 'WARN' "$logfile")" >> "$REPORT_DIR/${basename}_report.txt"
echo "INFO数量: $(grep -c 'INFO' "$logfile")" >> "$REPORT_DIR/${basename}_report.txt"
# 提取关键错误
grep 'ERROR' "$logfile" | sort | uniq -c | sort -rn | head -5 >> "$REPORT_DIR/${basename}_errors.txt"
}
# 批量处理
for log in "$LOG_DIR"/*.log; do
if [ -f "$log" ] && [ -r "$log" ]; then
analyze_log "$log"
fi
done
echo "分析完成,报告保存在: $REPORT_DIR"
使用建议
- 添加错误处理:检查文件是否存在、权限等
- 使用日志记录:记录处理过程和结果
- 谨慎使用删除操作:添加确认机制
- 考虑性能:大量文件时使用适当的批处理策略
- 做好备份:重要操作前先备份
Shell脚本的批处理非常灵活,可以根据具体需求组合使用上述方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播