linux 脚本安全和set用法

set 命令:可以用来定制shell环境
$- 变量
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 个历史命令
set 命令实现脚本安全
-u 在扩展一个没有设置的变量时,显示错误信息, 等同set -o nounset
-e 如果一个命令返回一个非0退出状态值(失败)就退出, 等同set -o errexit
-o option 显示,打开或者关闭选项
显示选项:set -o
打开选项:set -o 选项
关闭选项:set +o 选项
-x 当执行命令时,打印命令及其参数,类似 bash -x

范例:

[root@centos8 ~]#set -o
allexport     off
braceexpand   on
emacs         on
errexit       off
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
onecmd         off
physical       off
pipefail       off
posix         off
privileged     off
verbose       off
vi             off
xtrace         off

为了避免脚本中出现空变量,导致删根需要让nounset 开启,增加 set -u 命令
为了避免脚本中命令出错,导致继续执行需要让errexit 开启,增加 set -e 命令

#!/bin/bash
set -ue
DIR=/data1
#xxxx
rm -rf /data/tmp/$DIR1/*
echo fininshed

[root@centos8 data]#: mkdir tmp
[root@centos8 data]#: touch /data/tmp/a.txt /data/tmp/b.txt
[root@centos8 data]#: ls /data/tmp/
a.txt  b.txt
[root@centos8 data]#: chmod +x test.sh 
[root@centos8 data]#: bash test.sh
test.sh: line 16: DIR1: unbound variable
[root@centos8 data]#: ls /data/tmp/
a.txt  b.txt

以上新建tmp文件夹模拟上级目录为根目录,若以上脚本不加 set -u ,就会因为$DIR1是空变量,而删除上级目录。同时也避免因为执行 “xxxx” 命令报错,而向下继续执行命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值