linux下的set命令的简单介绍( 三 )


这次结合自己的一些思考来记录一些有关脚本安全的点
先来看一个简单的案例
在用户主目录下创建safe目录及相关文件用于测试演示
假如写一段脚本删除safe目录下所有文件:
这段是不是看起来没有问题,但如果由于有些大心脏的同学粗心 , 写成下面这样
最终,脚本都变成了rm-rf*,可怕至极
其实在shell脚本当中,为了防止这种现象,我们可以借助set 命令来实现相关控制
关于set 命令有较多参数,这里介绍最常用的几个
我们以刚才图4那段有问题的脚本说事
为保证不错删东西,我们加一个set -u 选项 ,判断变量是否存在
我们执行一下 , 看看效果
看,报错啦 , dir这个变量没有声明 , ls 查看一下文件 , 发现都还存在
set -e与set -u 通常搭配在一起使用
一个是遇到错误退出,一个是发现空变量报错
这两个搭配在一起放在脚本里可以防止一些变量为空导致文件全被清空的问题
拓展一下:
如果只想应用在脚本的某一段中,那么
开始段落前加set -e 表示范围开始
结束段落后加 set +e 表示范围结束
set -x 与set + x同理 。
1、删文件其实不用rm -rf,不是受迫性需要,不要使用rm -rf
2、修改、删除系统文件或其他重要的东西,先备份一份
3、非特殊需要,不建议在root下操作 , 普通用户即可
4、脚本加上set -e 与set -u保证安全
linux用set命令显示当前模式Linux系统设置linux下的set命令:set命令详解
set命令作?主要是显?系统中已经存在的shell变量linux下的set命令,以及设置shell变量的新变量值 。使?set更改shell特性时,符号"+"和"-"的作?分别是打开和关闭指定的模式 。set命令不能够定义新的shell变量 。如果要定义新的变量,可以使?命令以变量名=值的格式进?定义即可 。
语法
set(选项)(参数)
选项
-alinux下的set命令:标?已修改的变量,以供输出?环境变量 。
-blinux下的set命令:使被中?的后台程序?刻回报执?状态 。
-C:转向所产?的?件?法覆盖已存在的?件 。
-d:Shell预设会?杂凑表记忆使?过的指令,以加速指令的执? 。使?-d参数可取消 。
-e:若指令传回值不等于0,则?即退出shell 。
-f:取消使?通配符 。
-h:?动记录函数的所在位置 。
-H Shell:可利?"!"加指令编号的?式来执?history中记录的指令 。
-k:指令所给的参数都会被视为此指令的环境变量 。
-l:记录for循环的变量名称 。
-m:使?监视模式 。
-n:只读取指令,?不实际执? 。
-p:启动优先顺序模式 。
-P:启动-P参数后,执?指令时 , 会以实际的?件或?录来取代符号连接 。
-t:执?完随后的指令,即退出shell 。
-u:当执?时使?到未定义过的变量,则显?错误信息 。
-v:显?shell所读取的输?值 。
-x:执?指令后,会先显?该指令及所下的参数 。
参数
取消某个set曾启动的参数 。
实例
使?declare命令定义?个新的环境变量"mylove",并且将其值设置为"Visual C++" , 输?如下命令:
declare mylove='Visual C++' #定义新环境变量
再使?set命令将新定义的变量输出为环境变量,输?如下命令:
set -a mylove #设置为环境变量
执?该命令后,将会新添加对应的环境变量 。?户可以使?命令和命令分别显?和搜索环境变量"mylove",输?命令如下:
env | grep mylove #显?环境变量值
此时 , 该命令执?后,将输出查询到的环境变量值 。