错误处理 #

一、错误检测 #

bash
#!/bin/bash

# 检查命令执行结果
if ! command; then
    echo "命令执行失败"
    exit 1
fi

# 使用 || 处理错误
command || { echo "失败"; exit 1; }

# 检查退出码
command
if [ $? -ne 0 ]; then
    echo "失败"
fi

二、错误处理函数 #

bash
#!/bin/bash

die() {
    echo "错误: $*" >&2
    exit 1
}

warn() {
    echo "警告: $*" >&2
}

# 使用示例
[ -z "$1" ] && die "参数不能为空"

三、错误处理模式 #

bash
#!/bin/bash

# 使用set -e
set -e

# 错误陷阱
trap 'error_handler $? $LINENO $BASH_LINENO' ERR

error_handler() {
    local exit_code=$1
    local line_no=$2
    local bash_lineno=$3
    
    echo "错误: 退出码=$exit_code, 行号=$line_no"
    
    # 清理工作
    cleanup
    
    exit $exit_code
}

cleanup() {
    # 清理临时文件
    rm -f /tmp/temp_$$.*
}

四、实战示例 #

bash
#!/bin/bash

# 完整的错误处理模板
#!/bin/bash
set -euo pipefail

readonly SCRIPT_NAME=$(basename "$0")
readonly LOG_FILE="/var/log/${SCRIPT_NAME}.log"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}

error() {
    log "[ERROR] $*"
}

die() {
    error "$@"
    exit 1
}

cleanup() {
    log "清理资源..."
    # 清理逻辑
}

trap cleanup EXIT
trap 'die "脚本在第 $LINENO 行被中断"' INT TERM

main() {
    log "开始执行"
    
    # 验证参数
    [ $# -lt 1 ] && die "用法: $0 <参数>"
    
    # 执行任务
    do_something || die "任务执行失败"
    
    log "执行完成"
}

main "$@"

下一步 #

你已经掌握了错误处理,接下来让我们学习 系统监控脚本

最后更新:2026-03-27