Linux中shell脚本发现BUG和提高效率的神器—“set“方法
set是 Linux Shell 中的一个内置命令用于设置或显示 shell 的选项和环境变量。以下是关于 set 命令的基础概念、优势、类型、应用场景以及常见问题的解答。不管我们是做嵌入式Linux研发人员还是做运维人员都会或多或少去查看编写 shell 脚本你遇到问题是否也只会用一行一行echo去查看脚本分析问题。这样效率过于慢今天教大家set关键字方法轻松分析遇到的问题set的常用命令选项set用于设置或取消设置Shell选项、位置参数以及显示变量和函数定义。它的用法非常广泛主要包括以下几个方面设置/取消 Shell 选项显示变量不带参数时set会列出当前Shell的所有变量包括环境变量和函数定义13。设置选项通过-或启用/禁用Shell特性如调试、错误处理等14。-开启选项如set -x启用命令调试关闭选项如set x关闭调试14。set可以启用或禁用Shell的运行选项语法如下12set -option # 启用选项set option # 禁用选项常用选项设置位置参数set 可以重新设置脚本的位置参数1set -- arg1 arg2 arg3 # 设置 $1arg1, $2arg2, $3arg3示例123set -- first second thirdecho $1 # 输出 firstecho $2 # 输出 second执行脚本结果如下显示所有变量和函数不带参数的set会显示所有变量1set # 显示所有变量ubuntu上的环境变量都可以打印出来脚本里的变量打印不出来处理带空格的参数set可以正确处理带空格的参数12set -- Hello World Bash Scriptecho $1 # 输出 Hello World保留引号执行脚本结果如下调试脚本set -x和set -v常用于调试1234#!/bin/bashset -x # 打印执行的命令echo Debug modeset x # 关闭调试打开调试效果如下恢复默认选项1set - # 恢复所有选项为默认值顾名思义就是将之前的set的参数改回默认选项错误退出set -e常用于一个命令返回一个非0退出状态值(失败)就立刻退出下面举一个单独使用set -e的例子123456#!/bin/bashset -e # 启用错误退出echo 第一行正常执行ls /home/forlinx/1.txt # 这个命令会失败echo 这行不会被执行因为脚本已经退出执行脚本结果如下会发现脚本最后一行echo没有打印出来set -E常和trap函数结合一起使用更容易发现脚本里哪条指令发生错误下面举个set -E的例子123456789101112131415#!/bin/bashset -eE # 同时启用错误退出和错误追踪# 设置错误处理函数trapecho 错误捕获: 在行号 $LINENO, 命令: $BASH_COMMAND, 状态码: $? ERRmy_function() {echo在函数内执行ls /不存在的目录 # 这里会失败echo这行不会执行}echo脚本开始my_functionecho这行也不会执行看下执行脚本结果会发现打印两次错误发生在: ls /home/pan便于开发者更容易发现到哪条指令发生错误在项目中set -e和set -E更多是在一起使用便于更方便调试脚本这样更快速定位到哪条指令发生问题退出脚本123456789101112131415#!/bin/bashset -eE # 同时启用错误退出和错误追踪# 设置错误处理函数trapecho 错误捕获: 在行号 $LINENO, 命令: $BASH_COMMAND, 状态码: $? ERRmy_function() {echo在函数内执行ls /不存在的目录 # 这里会失败echo这行不会执行}echo脚本开始my_functionecho这行也不会执行查看脚本执行结果会发现确实比set -e时错误提示更加明显,会多提示一行错误发生的指令注意事项选项可组合使用如set -eu子Shell继承父Shell的选项设置但修改不影响父Shell恢复默认选项可用set 选项如set x。