linux shell set 命令教程-脚本中报错即刻退出、配置遇到不存在的变量就会报错、配置只要一个子命令失败,整个管道命令就失败、shell脚本打印执行的命令到屏幕

本文详细介绍了Linux Shell的set命令,主要用于定制和修改Shell环境参数。重点讲解了-e(errexit)、-u(nounset)和-o pipefail选项的用法。-e选项使脚本在遇到错误时立即退出,-u选项确保遇到未定义的变量时脚本报错并停止,-o pipefail确保管道中任何一个子命令失败,整个命令失败。此外,还提到了-x选项,用于在脚本执行过程中打印详细命令日志,便于调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux shell set 命令教程

set命令用来修改 Shell 环境的运行参数,也就是可以定制环境。一共有十几个参数可以定制,官方手册有完整清单。

官方:https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html

工作常用:

set -o errexit
set +o nounset
set -o pipefail

配置脚本中报错即刻退出

set -e从根本上解决了这个问题,它使得脚本只要发生错误,就终止执行。
set +e表示关闭-e选项,set -e表示重新打开-e选项。
-e还有另一种写法-o errexit

set -o errexit

配置遇到不存在的变量就会报错,并停止执行

#!/usr/bin/env bash

echo $a
echo bar

执行结果


$ bash script.sh

bar

可以看到,echo $a输出了一个空行,Bash 忽略了不存在的$a,然后继续执行echo bar。大多数情况下,这不是开发者想要的行为,遇到变量不存在,脚本应该报错,而不是一声不响地往下执行。

可以看到shell的行为是:执行脚本的时候,如果遇到不存在的变量,Bash 默认忽略它。

set -u就用来改变这种行为。脚本在头部加上它,遇到不存在的变量就会报错,并停止执行。
-u还有另一种写法-o nounset,两者是等价的。

et +o nounset

配置只要一个子命令失败,整个管道命令就失败,脚本终止执行

所谓管道命令,就是多个子命令通过管道运算符(|)组合成为一个大的命令。Bash 会把最后一个子命令的返回值,作为整个命令的返回值。也就是说,只要最后一个子命令不失败,管道命令总是会执行成功,因此它后面命令依然会执行,set -e就失效了。

这是set -e 失效的一个特殊情况。

set -o pipefail用来解决这种情况,只要一个子命令失败,整个管道命令就失败,脚本就会终止执行。

set -o pipefail

set -x shell脚本打印执行的命令到屏幕

在liunx脚本中可用set -x就可有详细的日志输出。

shell脚本中:

set -x    #启动"-x"选项 
set +x     #关闭"-x"选项

我们也可以在启动脚本时加该参数

sh -x run.dev

-x选项可以⽤来跟踪脚本的执⾏,使shell在执⾏脚本的过程中
把它实际执⾏的每⼀个命令⾏显⽰出来,并且在⾏⾸显⽰⼀个"+",
"+"后⾯显⽰的是经过了变量替换后的命令⾏内容,有助于分析
实际执⾏的命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值