Shell脚本:向磁盘中批量写入数据
来源:互联网 发布:网络运营总监简历 编辑:程序博客网 时间:2024/06/03 19:06
Shell脚本:向磁盘中批量写入数据
一、关于本文
工作要做的监控系统需要监控磁盘空间的使用率并报警。在测试这个功能的时候需要模拟两个场景:一是磁盘空间不断增长超过设定的阈值时,需要触发报警机制;二是磁盘空间降落到低于报警阈值的时候,不再进行报警。为了测试这两个场景,我写了下面三个脚本:
1)initializer.sh:创建目录TestDir,并创建一个大文件template
2)duplicator.sh:不断复制文件template,直到磁盘空间使用率超过输入的参数为止
3)cleaner.sh:清除前面两个脚本留下的痕迹,即删除目录TestDir
二、initializer.sh
最开始创建一个大文件的方式是通过Shell向文件中写入字符并复制的方式,代码如下(initializer.sh.old):
#!/bin/sh#本脚本用于初始化工作,创建文件夹TestDir并写入一个大小为100M的目录#创建文件TestDirif [ -x "./TestDir" ]; then rm -rf TestDirfimkdir TestDircd TestDirmkdir Templatecd Templatetouch template.txt#制作大小为100K的文件template.txtstring=""repetend="012345678901234|"for((i=1;i<6400;i++))do string=$string$repetenddoneecho $string >> template.txt#复制1000个该文件i=0while [ true ]; do if [ "$i" -gt 1020 ]; then break fi cp template.txt $i ((i++))doneecho "文件制造完毕,空间占用信息如下"pwd .du -sh .cd ../..exit 0
这种方式效率比较低,并且代码比较长,后来改用dd命令实现功能(initializer.sh):
#!/bin/sh#本脚本用于初始化工作,创建文件夹TestDir并写入一个大小为100M的目录#创建文件TestDirif [ -x "./TestDir" ]; then rm -rf TestDirfimkdir TestDircd 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 ]; then echo "脚本应有且只有一个输入" usagefi#脚本的输入必须为5-95之间的正整数threshold=`echo $1 | bc`if [ "$threshold" -lt 5 -o "$threshold" -gt 95 ]; then echo "脚本的输入必须为5-95之间的正整数" usagefi#目录TestDir必须存在if [ ! -d ./TestDir ]; then echo "缺少目录 TestDir" usagefi#文件TestDir/template必须存在if [ ! -f ./TestDir/template ]; then echo "缺少文件 TestDir/template" usageficd TestDir#复制文件,超过输入的阈值为止i=0while [ true ]; do cur=`df -h | grep /dev/sda3 | awk '{printf substr($5,1,length($5)-1)}'` echo "Current usage: $cur | Object usage: $threshold" if [ "$cur" -gt "$threshold" ]; then break; fi cp template $i echo " $i Duplication complete!" ((i++))donecd .. #TestDirecho "Script finished!"exit 0
四、cleaner.sh
这个脚本用于清除前两个脚本在系统中留下的痕迹
#!/bin/sh#本脚本用于清空脚本initializer.sh和duplicator.sh留下的痕迹#检查文件是否存在if [ ! -x "./TestDir" ]; then echo "文件 ./TestDir 不存在,无需清除" exit 0fi#用户确认后清除文件echo "真的要清除全部数据吗? (y/n)"read inputcase "$input" in y* | Y* ) rm -rf ./TestDir echo "数据删除完毕";; n* | N* ) echo "放弃删除数据";; * ) echo "输入未识别";;esacexit 0
五、调用效果截图
END
0 0
- Shell脚本:向磁盘中批量写入数据
- 使用shell批量向mysql中插入数据
- Linux中使用shell脚本向文件中写数据
- shell脚本后数据写入变量
- Python中向excel中写入数据
- mybatis中批量写入(insert)数据
- Sqlite3批量写入数据到数据库中
- 监控linux中CPU 内存 磁盘数据的shell脚本(图文)
- 向存在的文件中写入数据
- C++ 向文件中写入一组数据
- Cocoa2d-X 向服务器中写入数据
- 通过驱动向Excle中写入数据
- C++向文件中写入数据
- PHp向文件中写入数据
- 向记录文件中写入数据
- Python向excel中写入数据
- 使用Shell定时任务,向Solr增量写入数据
- 向shell脚本中传入参数
- iOS开发之iBeacon
- Unity3D之风,区域风,光斑
- 椒图科技发布免费服务器安全产品
- JavaBeans、EJB和POJO详解
- 注册安全的第三方资金账户进行投资理财
- Shell脚本:向磁盘中批量写入数据
- sql server查询SQL备忘(1)- group by all
- 快速排序之递归与非递归写法
- 软件工程文档
- apache AH01630: client denied by server configuration错误解决方法
- 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(三)
- 云计算核心价值三大看点全解析
- 在不到1G内存机器上快速搭建一个hadoop环境
- 用云计算,为地震逃生争取三十秒