Skip to content

调试技巧

bash -x

基本用法

bash
#!/bin/bash

# 调试脚本
bash -x script.sh

在脚本中启用调试

bash
#!/bin/bash

# 启用调试
set -x

# 脚本内容
echo "Hello, World!"

# 禁用调试
set +x

set 选项

set -e

bash
#!/bin/bash

# 遇到错误立即退出
set -e

# 脚本内容
command1
command2
command3

set -u

bash
#!/bin/bash

# 使用未定义的变量时报错
set -u

# 脚本内容
echo "$undefined_variable"

set -o pipefail

bash
#!/bin/bash

# 管道中任何命令失败都返回失败状态
set -o pipefail

# 脚本内容
command1 | command2 | command3

实用示例

示例1:调试脚本

bash
#!/bin/bash

# 启用调试
set -x

# 定义变量
name="张三"
age=25

# 输出变量
echo "姓名: $name"
echo "年龄: $age"

# 禁用调试
set +x

示例2:错误处理

bash
#!/bin/bash

# 遇到错误立即退出
set -e

# 使用未定义的变量时报错
set -u

# 管道中任何命令失败都返回失败状态
set -o pipefail

# 脚本内容
command1
command2 | command3
command4

示例3:日志记录

bash
#!/bin/bash

# 定义日志函数
log() {
    local level="$1"
    local message="$2"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [$level] $message"
}

# 使用日志函数
log "INFO" "程序启动"
log "WARN" "配置文件不存在"
log "ERROR" "连接失败"

示例4:调试输出

bash
#!/bin/bash

# 定义调试函数
debug() {
    local message="$@"
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] [DEBUG] $message" >&2
}

# 使用调试函数
debug "变量值: $variable"
debug "函数调用: function_name"

最佳实践

1. 使用 set -e

bash
# 好的做法
set -e
command1
command2
command3

# 不好的做法
command1
command2
command3

2. 使用 set -u

bash
# 好的做法
set -u
echo "$variable"

# 不好的做法
echo "$variable"

3. 使用 set -o pipefail

bash
# 好的做法
set -o pipefail
command1 | command2 | command3

# 不好的做法
command1 | command2 | command3

总结

调试技巧的关键点:

  1. bash -x:调试脚本
  2. set 选项set -eset -uset -o pipefail
  3. 实用示例:调试脚本、错误处理、日志记录、调试输出
  4. 最佳实践:使用 set -e、使用 set -u、使用 set -o pipefail

下一节我们将学习错误处理的使用。