写点什么

可以显著提升脚本的健壮性和效率

作者:Joseph295
  • 2025-06-30
    北京
  • 本文字数:1265 字

    阅读完需:约 4 分钟

1. set -x:调试模式(跟踪执行)

在执行命令前打印命令及其参数,帮助调试脚本:

bash

set -x  # 开启调试模式ls -lset +x  # 关闭调试模式
复制代码

2. trap:优雅处理信号和错误

捕获脚本退出信号(如错误或中断),执行清理操作:

bash

cleanup() {  echo "清理临时文件..."  rm -f temp.*}
trap cleanup EXIT # 脚本退出时执行 cleanup
复制代码

3. set -E:继承陷阱(Error Trap)

让函数也能继承 trap 设置,确保错误处理一致性:

bash

set -E  # 启用函数继承陷阱trap 'echo "Error at line $LINENO"' ERR
复制代码

4. shopt -s nullglob:空匹配时返回空字符串

当通配符匹配失败时,不返回原模式而是空字符串:

bash

shopt -s nullglobfor file in *.txt; do  # 如果没有 .txt 文件,循环会跳过  echo "$file"done
复制代码

5. shopt -s dotglob:通配符包含隐藏文件

让 * 等通配符匹配以 . 开头的文件:

bash

shopt -s dotglobcp * target/  # 包含 .hidden 文件
复制代码

6. shopt -s expand_aliases:在脚本中启用别名

默认情况下脚本不展开别名,使用此选项可启用:

bash

shopt -s expand_aliasesalias ll='ls -la'll  # 在脚本中生效
复制代码

7. set -m:作业控制(Monitor Mode)

启用作业控制,允许在后台运行命令并恢复到前台:

bash

set -mcommand &  # 后台运行fg  # 恢复到前台
复制代码

8. export IFS=$'\n\t ':自定义字段分隔符

修改内部字段分隔符(IFS)以安全处理包含空格的文件名:

bash

old_IFS="$IFS"IFS=$'\n\t'  # 仅以换行和制表符分隔for file in $(ls); do  # 安全处理带空格的文件名  echo "$file"doneIFS="$old_IFS"
复制代码

9. command -v:安全检查命令是否存在

检查命令是否存在,避免因命令不存在导致的错误:

bash

if command -v git >/dev/null 2>&1; then  echo "Git 已安装"else  echo "请安装 Git"fi
复制代码

10. printf %q:安全引用变量

将变量内容转换为可安全用于 Shell 的格式:

bash

filename="file with spaces.txt"escaped=$(printf %q "$filename")echo "安全引用: $escaped"  # 输出: file\ with\ spaces.txt
复制代码

11. local:函数内局部变量

在函数内部使用 local 声明局部变量,避免污染全局环境:

bash

my_function() {  local var="局部变量"  echo "$var"}
复制代码

12. set -o functrace:跟踪函数调用

启用函数调用跟踪,结合 trap 可实现函数进入 / 退出日志:

bash

set -o functracetrap 'echo "进入函数 $FUNCNAME"' DEBUG
复制代码

13. [[ ... ]]:高级条件判断

双括号条件判断支持更丰富的表达式,如正则匹配:

bash

if [[ "hello" =~ ^h.* ]]; then  echo "匹配成功"fi
复制代码

14. ( command ):子 Shell 执行

在子 Shell 中执行命令,避免影响当前环境:

bash

( cd /tmp; ls )  # 子 Shell 中切换目录,不影响当前目录
复制代码


15. { command1; command2; }:命令组

将多个命令组合为一个块,共享环境变量:

bash

{  echo "开始"  cp file1 file2  echo "结束"} > output.log  # 所有输出重定向到文件
复制代码


这些技巧能极大提升 Shell 脚本的健壮性、可读性和可维护性。建议将常用的设置添加到 .bashrc 或 .zshrc 中,让它们在每次启动 Shell 时自动生效。

发布于: 刚刚阅读数: 2
用户头像

Joseph295

关注

三脚猫的技术 2018-03-14 加入

coder

评论

发布
暂无评论
可以显著提升脚本的健壮性和效率_Joseph295_InfoQ写作社区