5 脚本安全和 set 命令
5.1 set 命令
set 命令:用来定制shell环境
- 为了防止变量赋值故障导致问题,应使用
set -u
进行检查,发现变量为空会报错 - 为了防止错误命令导致后续问题,应使用
set -e
,一旦发现错误立即退出
使用方法:
#!/bin/bash
set -e
------------------------------------------------------------
# 其他选项说明
-u 在扩展一个没有设置的变量时,显示错误信息, 等同set -o nounset
-e 如果一个命令返回一个非0退出状态值(失败)就退出, 等同set -o errexit
-x 当执行命令时,打印命令及其参数,类似 bash -x
-o option 显示,打开或者关闭选项
显示选项:set -o
打开选项:set -o 选项
关闭选项:set +o 选项
=
5.2 set 所有功能
查看所有功能的开关:
[root@centos8 ~]# set -o
allexport off
braceexpand on
emacs on
errexit off # set -e 对应的功能
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off # set -u 对应的功能
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
=
=
5.3 $-
变量
1 作用
[root@centos8/~]# echo $-
himBHs
# 通过命令 set 开启或关闭相关功能
h:hashall,打开选项后,Shell 会将命令所在的路径hash下来,避免每次都要查询。通过set +h将h选项关闭
i:interactive-comments,包含这个选项说明当前的 shell 是一个交互式的 shell。
所谓的非交互式shell在脚本中,i选项是关闭的
m:monitor,打开监控模式,就可以通过Job control来控制进程的停止、继续,后台或者前台执行等
B:braceexpand,大括号扩展
H:history,H选项打开,可以展开历史列表中的命令,可以通过!感叹号来完成,
例如“!!”返回上最近的一个历史命令,“!n”返回第 n 个历史命令
=
2 启闭方式
[root@centos8 ~]# echo $-
himBHs
[root@centos8 ~]# echo {1..5}
1 2 3 4 5
[root@centos8 ~]# set +B # 关闭 B 对应功能!!!!!!!!!!!!!!!
[root@centos8 ~]# echo $-
himHs # 关闭后就不再显示。。。
[root@centos8 ~]# echo {1..5}
{1..5} # 已经不能进行数字序列扩展。。。
[root@centos8 ~]# set -B # 恢复
[root@centos8 ~]# echo $-
himBHs
[root@centos8 ~]# echo {1..5}
1 2 3 4 5
=wan