Bash 脚本拾遗
报错优化
平时用 bash 写脚本,可以设置 set -e 在脚本执行失败的地方终止脚本。
set -e 的作用:当脚本中任何命令返回非零状态(即执行失败)时,立即终止脚本执行,有助于防止错误继续传播,让脚本在第一个错误处停止
- 默认情况下,
set -e只会终止脚本,但不会提供详细的错误信息
报错优化技巧:
将 trap 命令放在
set -e之后,脚本主体之前
trap 'echo "Exit status $? at line $LINENO from: $BASH_COMMAND"' ERR
trap 'echo "错误:退出状态 $? 在第 $LINENO 行,命令: $BASH_COMMAND"' ERR
trap:设置信号处理程序ERR:捕获错误信号(命令执行失败时触发)$?:上一个命令的退出状态码$LINENO:当前行号$BASH_COMMAND:导致错误的命令本身
使用示例:
#!/bin/bash
set -e # 在错误时退出
# 设置错误处理
trap 'echo "错误:退出状态 $? 在第 $LINENO 行,命令: $BASH_COMMAND"' ERR
# 示例命令
echo "脚本开始"
ls /不存在的目录 # 这会失败并触发 trap
echo "这行不会执行"
内置变量
$0: 脚本本身文件名称
$1: 命令行第一个参数,$2为第二个,以此类推
$*: 所有参数列表
$@: 所有参数列表
$#: 参数个数
$$: 脚本运行时的PID
$?: 脚本退出码
$@ 与 $* 区别
例如执行 test.sh 1 2 3
$* 表示 "1 2 3"
$@ 表示 "1" "2" "3"
二者没有被引号括起来时是一样的都为 “1 2 3”,只有当被引号括起来后才表现出差异。