Shell脚本:向磁盘中批量写入数据
本文转自: https://my.oschina.net/Tsybius2014/blog/343989
一、关于本文
工作要做的监控系统需要监控磁盘空间的使用率并报警。在测试这个功能的时候需要模拟两个场景:一是磁盘空间不断增长超过设定的阈值时,需要触发报警机制;二是磁盘空间降落到低于报警阈值的时候,不再进行报警。为了测试这两个场景,我写了下面三个脚本:
1)initializer.sh:创建目录TestDir,并创建一个大文件template
2)duplicator.sh:不断复制文件template,直到磁盘空间使用率超过输入的参数为止
3)cleaner.sh:清除前面两个脚本留下的痕迹,即删除目录TestDir
脚本运行环境:Red Hat Enterprise Linux Server release 6.4 (Santiago)
二、initializer.sh
最开始创建一个大文件的方式是通过Shell向文件中写入字符并复制的方式,代码如下(initializer.sh.old):
#!/bin/sh#本脚本用于初始化工作,创建文件夹TestDir并写入一个大小为100M的目录#创建文件TestDir
if [ -x "./TestDir" ]; thenrm -rf TestDir
fi
mkdir TestDir
cd TestDir
mkdir Template
cd Templatetouch template.txt#制作大小为100K的文件template.txt
string=""
repetend="012345678901234|"
for((i=1;i<6400;i++))
dostring=$string$repetend
done
echo $string >> template.txt#复制1000个该文件
i=0
while [ true ]; doif [ "$i" -gt 1020 ]; thenbreakficp template.txt $i((i++))
doneecho "文件制造完毕,空间占用信息如下"
pwd .
du -sh .cd ../..exit 0
这种方式效率比较低,并且代码比较长,后来改用dd命令实现功能(initializer.sh)
#!/bin/sh#本脚本用于初始化工作,创建文件夹TestDir并写入一个大小为100M的目录#创建文件TestDir
if [ -x "./TestDir" ]; thenrm -rf TestDir
fi
mkdir TestDir
cd TestDirdd if=/dev/zero of=template bs=1M count=1024pwd .
du -sh .cd ..exit 0
这个脚本创建了TestDir目录,并在里面写入了一个1.1GB的文件template
三、duplicator.sh
脚本duplicator.sh接受一个5-95的数字,作为阈值。这个脚本不断复制initializer.sh创建的template文件,直到里面指定的磁盘空间使用率超过输入的阈值时,才停止运行。
#!/bin/sh#运行本脚本前请先运行脚本 initializer.sh
#本脚本用于不断复制文件,直到给出的参数阈值超过当前磁盘空间利用率
#输入参数:磁盘空间使用率阈值#函数:打印脚本使用说明
function usage()
{echo "Usage: ./duplicator [threshold]"echo "threshold is an integer in the range of [1,99]"echo "*Run initializer.sh before run this script"exit 0
}#脚本有且只有一个输入
if [ "$#" -ne 1 ]; thenecho "脚本应有且只有一个输入"usage
fi#脚本的输入必须为5-95之间的正整数
threshold=`echo $1 | bc`
if [ "$threshold" -lt 5 -o "$threshold" -gt 95 ]; thenecho "脚本的输入必须为5-95之间的正整数"usage
fi#目录TestDir必须存在
if [ ! -d ./TestDir ]; then echo "缺少目录 TestDir"usage
fi#文件TestDir/template必须存在
if [ ! -f ./TestDir/template ]; thenecho "缺少文件 TestDir/template"usage
ficd TestDir#复制文件,超过输入的阈值为止
i=0
while [ true ]; docur=`df -h | grep /dev/sda3 | awk '{printf substr($5,1,length($5)-1)}'`echo "Current usage: $cur | Object usage: $threshold"if [ "$cur" -gt "$threshold" ]; thenbreak;ficp template $iecho " $i Duplication complete!"((i++))
donecd .. #TestDirecho "Script finished!"exit 0
四、cleaner.sh
#!/bin/sh#本脚本用于清空脚本initializer.sh和duplicator.sh留下的痕迹#检查文件是否存在
if [ ! -x "./TestDir" ]; thenecho "文件 ./TestDir 不存在,无需清除"exit 0
fi#用户确认后清除文件
echo "真的要清除全部数据吗? (y/n)"
read input
case "$input" in y* | Y* )rm -rf ./TestDir echo "数据删除完毕";;n* | N* ) echo "放弃删除数据";;* ) echo "输入未识别";;
esacexit 0
Shell脚本:向磁盘中批量写入数据相关推荐
- Shell脚本案例:批量新增用户
Shell脚本案例:批量新增用户 1.准备用户数据文件 cat users.txt user1 1234567890 user2 1234567890 user3 1234567890 user4 1 ...
- Mysql 批量写入数据 性能优化
2019独角兽企业重金招聘Python工程师标准>>> 测试环境 配置直接影响执行速度,先上一下测试机配置: cpu i7 5500U(低电压伤不起,以后再也不买低电压的U了) 内存 ...
- Linux下shell脚本实战之批量新建用户
Linux下shell脚本实战之批量新建用户 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 1.使用提供的user.txt用户列表 2.批量新建us ...
- crontab里shell脚本将top信息写入文件
crontab里shell脚本将top信息写入文件: 注: 1.top -n 1代表执行1次退出(默认top是不退出的),-d 1代表每1秒执行1次 2.crontab里需加/bin/bash # c ...
- redisTemplate批量写入数据
/*** 批量写入数据* @param objectMap* @return*/public void saveMap(final Map<String,Object> objectMap ...
- EF Core 批量写入数据使用整理_EF Core批量插入数据(一)
一.EF Core 批量添加数据 问题详解 AddRange() 问题整理: 1.对于批量写入数据,每次几万条情况 使用 Add() 方法不合理 2.使用AddRange() 每次批量写入数据也要有个 ...
- 在Linux中通过shell脚本向oracle数据库插入数据
通过shell脚本向oracle数据库插入数据 思路 实现 shell脚本 数据文件 测试 思路 如何通过shell脚本更新数据库数据?要解决这个问题,首先,我们需要在脑中回忆一下我们通常是如何更新数 ...
- Linux中使用shell脚本向文件中写数据
以前没写过shell脚本,懂得一些Linux的操作命令.看了网上一些shell脚本的方法.总结,发现用脚本将一些数据写入文件比较实用.遂举例如下: #!/bin/bash #Test echo &qu ...
- 如何使用shell脚本快速排序和去重文件数据
前面写过一篇通过shell脚本去重10G数据的文章,见<用几条shell命令快速去重10G数据>.然而今天又碰到另外一个业务,业务复杂度比上次的单纯去重要复杂很多.找了很久没有找到相应的办 ...
最新文章
- 分布式缓存DistributedCache的使用
- UVA11100旅行(大包装小包,问最少多少个包)
- Siverlight去掉ToolTip的白色边框
- 事情各大厂商在战场上布局
- eclipse显示行号和Tab、空格、回车
- 如何下载HLS视频到本地(m3u8)
- 使用阿里云搭建微信公众号管理系统
- parseConf(配置文件解析器)
- System.Web.AspNetHostingPermission 类型的权限已失败
- 二进位注册文件_指定的文件不是注册脚本注册表编辑器中只能导入二进位注册文。怎么办?...
- Teamviewer Install
- linux服务器突然有大量连接,linux服务器出现丢包的解决方法
- Win7系统怎么获取administrator权限?获取administrator权限的方法
- memcached使用总结篇一
- Masimo宣布首款用于 Root(R)患者监护与互联总机的第三方Masimo Open Connect(R)模块获得CE标记
- 中兴网络设备交换机路由器查看BGP状态检查命令方法
- Google Map API
- php对接阿里巴巴开放平台
- It is indirectly referenced from required .class files
- LTE同步技术(一)