当前位置: 首页 > news >正文

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的运行选项,语法如下:

1

2

set -<option> # 启用选项

set +<option> # 禁用选项

常用选项

设置位置参数

set 可以重新设置脚本的位置参数:

1

set -- arg1 arg2 arg3 # 设置 $1="arg1", $2="arg2", $3="arg3"

示例

1

2

3

set -- "first" "second" "third"

echo "$1" # 输出 "first"

echo "$2" # 输出 "second"

执行脚本结果如下

显示所有变量和函数

不带参数的set会显示所有变量:

1

set # 显示所有变量

ubuntu上的环境变量都可以打印出来,脚本里的变量打印不出来

处理带空格的参数

set可以正确处理带空格的参数:

1

2

set -- "Hello World" "Bash Script"

echo "$1" # 输出 "Hello World"(保留引号)

执行脚本结果如下

调试脚本

set -xset -v常用于调试

1

2

3

4

#!/bin/bash

set -x # 打印执行的命令

echo "Debug mode"

set +x # 关闭调试

打开调试效果如下

恢复默认选项

1

set - # 恢复所有选项为默认值

顾名思义就是将之前的set的参数改回默认选项

错误退出

set -e常用于一个命令返回一个非0退出状态值(失败),就立刻退出

下面举一个单独使用set -e的例子

1

2

3

4

5

6

#!/bin/bash

set -e # 启用错误退出

echo "第一行正常执行"

ls /home/forlinx/1.txt # 这个命令会失败

echo "这行不会被执行,因为脚本已经退出"

执行脚本结果如下

会发现脚本最后一行echo没有打印出来

set -E常和trap函数结合一起使用更容易发现脚本里哪条指令发生错误

下面举个set -E的例子

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#!/bin/bash

set -eE # 同时启用错误退出和错误追踪

# 设置错误处理函数

trap'echo "错误捕获: 在行号 $LINENO, 命令: $BASH_COMMAND, 状态码: $?"' ERR

my_function() {

echo"在函数内执行"

ls /不存在的目录 # 这里会失败

echo"这行不会执行"

}

echo"脚本开始"

my_function

echo"这行也不会执行"

看下执行脚本结果

会发现打印两次错误发生在: ls /home/pan便于开发者更容易发现到哪条指令发生错误

在项目中,set -eset -E更多是在一起使用,便于更方便调试脚本,这样更快速定位到哪条指令发生问题退出脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#!/bin/bash

set -eE # 同时启用错误退出和错误追踪

# 设置错误处理函数

trap'echo "错误捕获: 在行号 $LINENO, 命令: $BASH_COMMAND, 状态码: $?"' ERR

my_function() {

echo"在函数内执行"

ls /不存在的目录 # 这里会失败

echo"这行不会执行"

}

echo"脚本开始"

my_function

echo"这行也不会执行"

查看脚本执行结果

会发现确实比set -e时错误提示更加明显,会多提示一行错误发生的指令

注意事项‌

  • 选项可组合使用(如set -eu);
  • 子Shell继承父Shell的选项设置,但修改不影响父Shell;
  • 恢复默认选项可用set +选项(如set +x)。
http://www.jsqmd.com/news/581269/

相关文章:

  • 告别Elsevier投稿焦虑:Elsevier Tracker的智能监控方案
  • 王爽《汇编语言》第 3 章「寄存器 (内存访问)」超详尽深度解析
  • 2026年eVTOL推进电机口碑排行,看看哪家合作经验多、体积小还成本低 - 工业品牌热点
  • Notepad--:跨平台中文文本编辑器的5大核心优势与实战指南
  • 换了台电脑检测AI率结果不一样,是哪出问题了
  • 专业术语统计报告_电氢耦合虚拟电厂市场交易及利益分配策略研究
  • C语言中的错误处理:errno与perror
  • 矢量转换工具:设计师必备的格式转换解决方案
  • C++27协程调试黑盒破解(GDB 14.2+LLDB 19原生支持协程栈回溯,含VS2025 Preview 4调试器深度配置指南)
  • ai结对编程:在快马平台让ai帮你搭建符合规范的python flask项目骨架
  • 终极解决方案:用PyFluent彻底解决CFD仿真重复劳动难题
  • Phi-4-mini-reasoning详细步骤:从镜像启动到Web交互验证的完整指南
  • 芯片缺陷检测数据集3202张4类VOC+YOLO格式
  • 【Python 3.14 JIT生产级调优白皮书】:20年CPython核心贡献者亲授5大不可绕过的JIT陷阱与3.2倍吞吐提升实测路径
  • 2026企业AI应用白皮书:从试点到规模化落地的实战指南
  • Alpamayo-R1-10B代码实例:Python脚本调用alpamayo_r1/test_inference.py
  • Agent反思机制入门到精通,看这篇小红书面试级解析就够了!
  • 3步掌握Qwen2.5-14B:从环境搭建到生产级应用
  • 雀魂AI助手Akagi:从入门到精通的全方位使用指南
  • Z-Image-Turbo-rinaiqiao-huiyewunv从零开始:树莓派5+ROCm GPU实验性部署可行性分析
  • 2026高速喷气织机推荐:为什么越来越多工厂选择千家汇集团? - 企师傅推荐官
  • 基于DSP28335的Matlab_Simulink代码生成实验模型 [hot](原作者,csdn有相关教程) [黄圆]可以用于入门学习数字信号处理器的使用,。c5 模型默认支持MATLAB 20
  • Zotero插件市场终极指南:5步完成插件管理,效率提升96.7%
  • 白帽挖洞实操指南|从零基础到轻松提权,新手也能快速
  • 本科生论文格式通关秘籍:Paperxie AI 让你告别格式返工
  • AI事业大使:是创业风口还是潜在骗局?机遇背后的真实挑战
  • 5分钟掌握微信聊天记录永久保存与智能分析终极方案
  • 资深程序员写代码感悟:复杂 ≠ 高级
  • 千问3.5-2B入门指南:支持JPG/PNG/BMP上传,自然语言提问无需格式约束
  • 会议演示与在线教学:ppInk屏幕标注工具如何提升你的沟通效率