juechafun/Untitled 6.md

87 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
#复盘/0 #临时/备忘 #状态/待处理
20260204-备忘-主题名-文件内容
## 一句话描述
[__bash 脚本规范/模板______]
---
```bash
#!/bin/bash
set -ueo pipefail
```
```bash
#!/bin/bash
set -euo pipefail
LOG_PATH="/var/log/test.log"
# 标记:防止错误处理函数被重复调用
ERROR_HANDLED=0
# 错误处理函数
# 参数1出错的行号
# 参数2出错的命令可选
error_handler() {
# 如果已经处理过错误,直接退出(防止重复触发)
if [ $ERROR_HANDLED -eq 1 ]; then
return 1
fi
ERROR_HANDLED=1
# 获取错误行号和错误码
local err_line=$1
local err_cmd=${2:-"未知命令"}
local err_code=$?
local current_time=$(date +"%Y-%m-%d %H:%M:%S")
echo -e "\n[$current_time] 错误:脚本执行失败!" >> $LOG_PATH
echo "错误行号:第 $err_line 行" >> $LOG_PATH
echo "错误命令:$err_cmd" >> $LOG_PATH
echo "错误码:$err_code" >> $LOG_PATH
echo "错误描述:$(strerror $err_code 2>/dev/null || echo "未知错误")" >> $LOG_PATH
echo -e "\n[$current_time] 错误:脚本执行失败!"
echo "错误行号:第 $err_line 行"
echo "错误命令:$err_cmd"
echo "错误码:$err_code"
echo "错误描述:$(strerror $err_code 2>/dev/null || echo "未知错误")"
echo "脚本执行失败,详情请查看: $LOG_PATH"
# 以错误码退出脚本非0
exit $err_code
}
success_handler() {
if [ $? -eq 0 ] && [ $ERROR_HANDLED -eq 0 ]; then
echo -e "\n[$(date +"%Y-%m-%d %H:%M:%S")] 脚本执行完成(正常退出)"
fi
}
# 配置陷阱只捕获ERR信号错误时触发并传递行号和出错命令
# 使用BASH_COMMAND可以获取触发错误的具体命令
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
# 配置EXIT陷阱可选仅用于正常退出的提示不处理错误
trap 'success_handler' EXIT
# ==================== 测试代码 ====================
echo "脚本开始执行..."
# 故意制造错误执行不存在的目录的ls命令模拟出错场景
ls /不存在的目录 # 这一行执行失败,会触发错误处理
# 如果上面的命令执行成功(实际不会),才会执行下面的代码
echo "这行代码不会被执行..."
```