Bash技巧:使用 set 内置命令帮助调试 shell 脚本
Bash技巧:使用 set 内置命令帮助调试 shell 脚本
在 bash 中,可以使用 set
内置命令设置和查看 shell 的属性。
这些属性会影响 shell 的不同行为。
下面对一些常用的属性进行说明。
set 命令
查看 help set 对 set
命令的说明如下:
set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
Change the value of shell attributes and positional parameters, or display the names and values of shell variables.Using + rather than - causes these flags to be turned off.
即,set
命令后面可以跟着要设置的 shell 属性选项。
如果选项以 -
开头,则是设置为打开该选项。
如果选项以 +
开头,则是设置为关闭该选项。
使用 set -e 选项在遇到报错后停止执行
查看 help set 命令,对 -e
选项说明如下:
-e
Exit immediately if a command exits with a non-zero status.
即,set -e
会在遇到任何非 0 的命令返回值时,退出所在的 shell。
在脚本开头 #!/bin/bash
语句的下一行添加 set -e
语句,那么执行该脚本时,执行过程中遇到的任何错误都会终止脚本,可以避免执行后续的脚本语句。
具体举例说明如下:
#!/bin/bash
set -e
从编程的角度来说,set -e
选项的作用跟C语言的 assert() 函数类似,遇到错误就停止。
在调试 shell 脚本时,如果遇到某个不预期的错误,就可以使用这个选项让脚本及时停止运行,以便找到最接近出错位置的语句。
使用 set -x 选项打开调试开关
查看 help set 命令,对 -x
选项说明如下:
-x
Print commands and their arguments as they are executed.
即,set -x
会打印具体执行的命令、以及命令的参数。
这些参数是经过 bash 扩展后的参数,可以方便看到的各个变量值扩展后的结果是什么、某个变量是否扩展为空导致参数个数发生变化,等等。
如前面说明,把选项开头的 -
改成 +
会关闭选项,set +x
命令关闭调试开关。
具体举例如下:
$ set -x
$ ls test*
+ ls --color=auto testcase.sh testfile
$ set +x
这里先执行 set -x
命令打开调试开关。
然后执行 ls test*
命令,可以看到扩展后的命令为 ls --color=auto testfile testcase.sh
。
从扩展后的结果可以看到 test*
被扩展为当前目录下以 "test" 开头的文件名,有助于理解 *
通配符的扩展结果。
可以使用类似于下面的语句在 shell 脚本中设置该选项:
#!/bin/bash
set -x
在学习 bash 通配符、各个扩展表达式时,set -x
可以打印出具体的扩展结果,便于理解。
使用 set -v 回显所输入的命令
查看 help set 命令,对 -v
选项说明如下:
-v
Print shell input lines as they are read.
即,set -v
选项会回显所输入的命令。
跟 set -x
的区别在于,set -x
显示的是扩展后的结果,而 set -v
显示的是所输入的命令自身。
具体举例如下:
$ set -v
$ ls test*
ls test*
testcase.sh testfile
可以看到,设置 set -v
选项后,执行 ls test*
命令,回显的内容就是 "ls test*"。
而不是回显 test*
扩展之后、以 "test" 开头的文件名。
Bash技巧:使用 set 内置命令帮助调试 shell 脚本的更多相关文章
- bash内置命令的特殊性,后台任务的"本质"
本文解释bash内置命令的特殊性.前台.后台任务的"本质",以及前.后台任务和bash进程.终端的关系.网上没类似的资料,所以都是自己的感悟和总结,如有错误,120分的期待盼请指正 ...
- Bash内置命令exec和重定向
Bash内置命令exec可以替换当前程序而不需要启动一个新的进程,可以改变标准输入和输出而不需要启动一个新的子进程.如果文件用exec打开,read命令就会把文件指针每次指向下一行直到文件的末尾,如果 ...
- Bash内置命令
Bash有很多内置命令,因为这些命令是内置的,因此bash不需要在磁盘上为它们定位,执行速度更快. 1)列出所有内置命令列表$enable 2)关闭内置命令test$enable -n test 3) ...
- bash内置命令mapfile:读取文件内容到数组
bash提供了两个内置命令:readarray和mapfile,它们是同义词.它们的作用是从标准输入读取一行行的数据,然后每一行都赋值给一个数组的各元素.显然,在shell编程中更常用的是从文件.从管 ...
- Linux bash内置命令集
man cd -->查询不到,所以会提示bash的内置命令 . alias bg bind break builtin caller cd command compgen complete c ...
- Bash基础——内置命令
前言 Shell有很多内置在其源代码中的命令.由于命令是内置的,所以Shell不必到磁盘上搜索它们.内置命令执行速度更快,不同的Shell内置命令有所不同. 如何查找内置命令 之前查了好久怎么收索内置 ...
- 哪一个 bash 内置命令能够进行数学运算?
bash shell 的内置命令 let 可以进行整型数的数学运算. #! /bin/bash--let c=a+b--
- 哪一个 bash 内置命令能够进行数学运算?
bash shell 的内置命令 let 可以进行整型数的数学运算. #! /bin/bash - - let c=a+b - -
- Linux内置命令
主要Shell内置命令 Shell有很多内置在其源代码中的命令.这些命令是内置的,所以Shell不必到磁盘上搜索它们,执行速度因此加快.不同的Shell内置命令有所不同. A.2.1 bash内置命令 ...
随机推荐
- vue 快速入门 系列 —— 侦测数据的变化 - [基本实现]
其他章节请看: vue 快速入门 系列 侦测数据的变化 - [基本实现] 在 初步认识 vue 这篇文章的 hello-world 示例中,我们通过修改数据(app.seen = false),页面中 ...
- 用pyqt5做一个简易的音乐播放器
需求 要求可以读取音频文档,有播放和暂停的功能 附上代码(1)UI界面 # -*- coding: utf-8 -*- # Form implementation generated from rea ...
- [Kong 与 Konga 与 Postgres数据库] 之 Kuberneres 部署
1.Kong的概述 Kong是一个clould-native.快速的.可扩展的.分布式的微服务抽象层(也称为API网关.API中间件或在某些情况下称为服务网格)框架.Kong作为开源项目在2015年推 ...
- 借鉴Elasticsearch 7.x 深入系列学习
开始 Elasticsearch 深入系列目录如下: Elasticsearch 7.x 深入 数据准备 Elasticsearch 7.x 深入[1]索引[一]原理 Elasticsearch 7. ...
- Dynamics CRM Report安装出错三
需要删除和备份报表服务的密钥集 进入到Micorsoft SQL Server Reporting Services配置管理器 选择"加密密钥",点击"删除" ...
- mariadb_2 单表的增删改查
命令关键字: 创建表 create 删除表 drop 修改表的内容 update 修改表的结构 alter 删除表中内容 delete 增加表中内容 insert 查询表中内容 select ...
- 详解Linux指令与文件的搜寻
我们在管理Linux服务器时通常会进行搜索文件及目录操作,下面我们就开始了解一下linux目录结构的相关知识. 博主再奉上一套零基础入门Linux视频,带你从入门到精通 https://www.bil ...
- EasyCode Entity 实体类模板 IDEA
自己修改了一份EasyCode的实体类模板,防止日后找不到在这里存一下 修改了如下内容: 取消生成GetSet方法,改用Lombok 修改默认命名规则,改为[表名Entity.java] 取消了实现序 ...
- PAT 乙级 -- 1001 -- 害死人不偿命的(3n+1)猜想
题目: 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年 ...
- 【译】android的审计和hacking工具
原文:Best Android Tools For Security Audit and Hacking android系统占移动市场份额的80%且有恶意软件,这是一个问题.Hacker会对手机恶意操 ...