linux shell内建命令set

本文详细介绍了Bash shell中set命令的基本语法及各种选项的作用,包括如何使用这些选项来开关shell的不同特性,如命令执行失败时立即退出、不执行命令仅进行语法检查等。

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

基本语法:
set命令的基本语法如下(来自bash的man手册):
    set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
    set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
set通过选项来开关shell的不同特性,每个特性都对应一个选项。每个特性都有两种配置方式:
一种是通过set -e和set +e这种形式,即直接指定选项。
另一种是通过set -o errexit和set +o errexit这种形式,即通过o这个选项来指定选项名。
我想你一定对选项是用+号还是-号十分好奇。在set命令中,选项前面跟着 - 表示开启这个选项,+ 表示关闭这个选项。

选项介绍
-o
执行set -o会输出当前的set选项配置情况:
例如:
~/programming/test$ set -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on

+o
执行set +o也是输出当前的set选项的配置情况,只不过输出形式是一系列的set命令。这种输出形式一般用于重建当前的set配置项时使用。
例如:
~/programming/test$ set +o
set +o allexport
set -o braceexpand
set -o emacs
set +o errexit
set +o errtrace
set +o functrace
set -o hashall
set -o histexpand
set -o history
set +o ignoreeof

set -e 或者 set -o errexit
设置了这个选项后,当一个命令执行失败时,shell会立即退出。

set -n 或者 set -o noexec
设置了这个选项后,shell读取命令,但是不会执行它们。这个选项可以用来检查shell脚本是否存在语法错误。

set -u 或者 set -o unset
设置了这个选项之后,当shell要扩展一个还未设置过值的变量时,shell必须输出信息到stderr,然后立即退出。但是交互式shell不应该退出。

set -x 或者 set -o xtrace
设置了这个选项之后,对于每一条要执行的命令,shell在扩展了命令之后(参数扩展)、执行命令之前,输出trace到stderr。
stdout, stdin, stderr的中文名字分别是标准输出,标准输入和标准错误。

set -o pipefail
这个选项会影响管道的返回值。默认情况下,一个管道的返回值是最后一个命令的返回值,
比如cmda | cmdb | cmdc这个管道,返回值是由cmdc命令的返回值决定的。如果指定了pipefail选项,那么管道的返回值就会由最后一个失败的命令决定,
意思就是有命令失败就会返回非0值。如果所有命令都成功,则返回成功。

例子
#!/bin/bash

set -o xtrace   #即开启简易的脚本命令调试模式
set -o errexit  # 可以把这样注释掉看下执行效果有什么不一样。

echo "Before"
ls /filenoexists  # ls也不存在的文件;执行报错就退出了脚本,因此echo "After"就并未执行
echo "After"

详细参考

man bash中的SHELL BUILTIN COMMANDS

转载于:https://www.cnblogs.com/longchang/p/11584280.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值