6.1 Shell 调试、安全与实战指南

6.1 Shell 调试、安全与实战指南

Shell 调试基础

Shell 脚本常见问题包括变量为空、路径错误、条件判断异常以及命令执行失败,因此调试能力非常重要。

bash -x 调试

bash -x 可以输出脚本执行过程。

1
bash -x test.sh

输出示例:

1
2
3
+ name=shao
+ echo shao
+ date

适用于排查:

  • 变量值错误
  • 条件判断异常
  • 执行顺序问题

set -x 开启调试

脚本内部也可开启调试模式。

1
2
3
4
5
6
7
8
9
#!/bin/bash

set -x

name="linux"

echo "$name"

set +x

Shell 安全编写规范

变量必须加双引号

错误写法:

1
if [ $name = root ]

正确写法:

1
if [ "$name" = "root" ]

避免变量为空时产生:

1
unary operator expected

字符串判空

判断非空:

1
[ -n "$name" ]

判断为空:

1
[ -z "$name" ]

参数检查示例:

1
2
3
4
5
if [ -z "$1" ]
then
echo "请输入参数"
exit 1
fi

删除操作安全检查

危险写法:

1
rm -rf "$dir"

安全写法:

1
2
3
4
if [ -n "$dir" ] && [ -d "$dir" ]
then
rm -rf -- "$dir"
fi

exit 与返回状态码

Shell 使用状态码表示执行结果:

  • 0:成功
  • 0:失败

示例:

1
exit 0
1
exit 1

条件退出:

1
2
3
4
5
if [ ! -f "$file" ]
then
echo "文件不存在"
exit 1
fi

trap 信号捕获

trap 用于捕获脚本中断信号。

1
trap 'echo "脚本终止"; exit' INT

示例:

1
2
3
4
5
6
7
8
#!/bin/bash

trap 'echo "检测到 Ctrl+C"; exit' INT

while true
do
sleep 1
done

常用于:

  • 清理临时文件
  • 保存状态
  • 中断恢复

日志与重定向

日志输出

推荐为脚本增加日志。

1
2
3
4
5
log() {
echo "$(date '+%F %T') $1" >> app.log
}

log "服务启动"

输出重定向

标准输出:

1
command > output.log

错误输出:

1
command 2> error.log

同时输出:

1
command > all.log 2>&1

/dev/null

忽略输出:

1
command > /dev/null 2>&1

常用于静默执行命令。


6.1 Shell 调试、安全与实战指南
https://blog.sh462li.top/2026/06/08/Shell_learn/6.1 调试、安全与实战指南/
作者
SHAO
发布于
2026年6月8日
许可协议