本文目录导读:

我来介绍几种Shell脚本实现调试模式的常用方法:
使用bash调试选项
命令行参数
bash -x script.sh
脚本内部启用(在脚本开头添加)
#!/bin/bash set -x # 开启调试模式 # 你的脚本内容 set +x # 关闭调试模式
实现自定义调试函数
#!/bin/bash
# 调试开关
DEBUG=false
# 自定义调试函数
debug() {
if [ "$DEBUG" = true ]; then
echo "[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') - $1"
fi
}
# 详细调试函数,显示变量值
debug_var() {
if [ "$DEBUG" = true ]; then
local var_name=$1
local var_value=$2
echo "[DEBUG] $var_name = $var_value (Line: ${BASH_LINENO[0]})"
fi
}
# 使用示例
echo "正常输出"
debug "这是调试信息"
debug_var "USER" "$USER"
创建调试模式开关
#!/bin/bash
# 检查命令行参数是否包含-d或--debug
for arg in "$@"; do
case "$arg" in
-d|--debug)
DEBUG_MODE=true
set -x # 自动开启bash调试
;;
*)
;;
esac
done
if [ "$DEBUG_MODE" = true ]; then
echo "运行在调试模式..."
fi
# 你的脚本逻辑
echo "脚本执行中..."
高级调试技巧
1 追踪函数调用
#!/bin/bash
trace() {
local depth=${#FUNCNAME[@]}
local indent=""
for ((i=0; i<depth; i++)); do
indent+=" "
done
echo "${indent}[TRACE] ${FUNCNAME[1]}() -> $1"
}
my_function() {
trace "Entering function"
local var="test"
trace "Variable var = $var"
trace "Exiting function"
}
my_function
2 日志级别系统
#!/bin/bash
# 日志级别
LOG_LEVEL=${LOG_LEVEL:-2} # 默认INFO级别
declare -A LOG_LEVELS=(
["ERROR"]=1
["WARN"]=2
["INFO"]=3
["DEBUG"]=4
)
log() {
local level=$1
local message=$2
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
if [ ${LOG_LEVELS[$level]} -le $LOG_LEVEL ]; then
echo "[$timestamp] [$level] $message"
fi
}
# 使用示例
log "ERROR" "这是一个错误消息"
log "INFO" "这是一个信息消息"
log "DEBUG" "这是一个调试消息" # 只在日志级别>=4时显示
调试模式配置文件
创建配置文件 debug.conf:
# 调试配置文件 DEBUG=true DEBUG_LEVEL=2 DEBUG_LOG_FILE="/tmp/script_debug.log" DEBUG_FUNCTIONS="func1,func2"
脚本中读取配置:
#!/bin/bash
# 加载调试配置
if [ -f "debug.conf" ]; then
source debug.conf
fi
# 根据配置设置调试
if [ "$DEBUG" = true ]; then
exec 5>> "$DEBUG_LOG_FILE"
BASH_XTRACEFD=5
set -x
fi
# 脚本逻辑
echo "脚本运行中..."
条件调试
#!/bin/bash
# 条件调试函数
debug_print() {
local condition=$1
local message=$2
if [ "$condition" = true ]; then
echo "[DEBUG] $message"
fi
}
# 针对特定部分调试
SECTION_1_DEBUG=true
SECTION_2_DEBUG=false
debug_print $SECTION_1_DEBUG "Section 1 - 正在执行..."
echo "Section 1 逻辑"
debug_print $SECTION_2_DEBUG "Section 2 - 正在执行..."
echo "Section 2 逻辑"
最佳实践建议
- 不要在生产环境启用调试模式
- 使用环境变量控制调试(如
export DEBUG=true) - 调试信息输出到日志文件而非标准输出
- 包含时间戳和行号信息
- 使用颜色区分调试输出
#!/bin/bash
# 带颜色的调试输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
debug_info() {
if [ "$DEBUG" = true ]; then
echo -e "${GREEN}[DEBUG]${NC} $1"
fi
}
debug_warn() {
if [ "$DEBUG" = true ]; then
echo -e "${YELLOW}[WARN]${NC} $1"
fi
}
debug_error() {
echo -e "${RED}[ERROR]${NC} $1" >&2
}
这些方法可以根据实际需求组合使用,灵活实现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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播