本文转自: 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脚本:向磁盘中批量写入数据相关推荐

  1. Shell脚本案例:批量新增用户

    Shell脚本案例:批量新增用户 1.准备用户数据文件 cat users.txt user1 1234567890 user2 1234567890 user3 1234567890 user4 1 ...

  2. Mysql 批量写入数据 性能优化

    2019独角兽企业重金招聘Python工程师标准>>> 测试环境 配置直接影响执行速度,先上一下测试机配置: cpu i7 5500U(低电压伤不起,以后再也不买低电压的U了) 内存 ...

  3. Linux下shell脚本实战之批量新建用户

    Linux下shell脚本实战之批量新建用户 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 二.脚本内容 三.运行脚本 一.脚本要求 1.使用提供的user.txt用户列表 2.批量新建us ...

  4. crontab里shell脚本将top信息写入文件

    crontab里shell脚本将top信息写入文件: 注: 1.top -n 1代表执行1次退出(默认top是不退出的),-d 1代表每1秒执行1次 2.crontab里需加/bin/bash # c ...

  5. redisTemplate批量写入数据

    /*** 批量写入数据* @param objectMap* @return*/public void saveMap(final Map<String,Object> objectMap ...

  6. EF Core 批量写入数据使用整理_EF Core批量插入数据(一)

    一.EF Core 批量添加数据 问题详解 AddRange() 问题整理: 1.对于批量写入数据,每次几万条情况 使用 Add() 方法不合理 2.使用AddRange() 每次批量写入数据也要有个 ...

  7. 在Linux中通过shell脚本向oracle数据库插入数据

    通过shell脚本向oracle数据库插入数据 思路 实现 shell脚本 数据文件 测试 思路 如何通过shell脚本更新数据库数据?要解决这个问题,首先,我们需要在脑中回忆一下我们通常是如何更新数 ...

  8. Linux中使用shell脚本向文件中写数据

    以前没写过shell脚本,懂得一些Linux的操作命令.看了网上一些shell脚本的方法.总结,发现用脚本将一些数据写入文件比较实用.遂举例如下: #!/bin/bash #Test echo &qu ...

  9. 如何使用shell脚本快速排序和去重文件数据

    前面写过一篇通过shell脚本去重10G数据的文章,见<用几条shell命令快速去重10G数据>.然而今天又碰到另外一个业务,业务复杂度比上次的单纯去重要复杂很多.找了很久没有找到相应的办 ...

最新文章

  1. 分布式缓存DistributedCache的使用
  2. UVA11100旅行(大包装小包,问最少多少个包)
  3. Siverlight去掉ToolTip的白色边框
  4. 事情各大厂商在战场上布局
  5. eclipse显示行号和Tab、空格、回车
  6. 如何下载HLS视频到本地(m3u8)
  7. 使用阿里云搭建微信公众号管理系统
  8. parseConf(配置文件解析器)
  9. System.Web.AspNetHostingPermission 类型的权限已失败
  10. 二进位注册文件_指定的文件不是注册脚本注册表编辑器中只能导入二进位注册文。怎么办?...
  11. Teamviewer Install
  12. linux服务器突然有大量连接,linux服务器出现丢包的解决方法
  13. Win7系统怎么获取administrator权限?获取administrator权限的方法
  14. memcached使用总结篇一
  15. Masimo宣布首款用于 Root(R)患者监护与互联总机的第三方Masimo Open Connect(R)模块获得CE标记
  16. 中兴网络设备交换机路由器查看BGP状态检查命令方法
  17. Google Map API
  18. php对接阿里巴巴开放平台
  19. It is indirectly referenced from required .class files
  20. LTE同步技术(一)

热门文章

  1. 3个可以写进简历的京东AI NLP项目实战,走完这五步就是Top算法工程师
  2. 快速学习正则表达式,不用死记硬背,这里有份中文资源和互动学习网站
  3. 这家中国AI公司,正在打入新加坡AI“腹地”
  4. 下载ssl证书并安装后如何导出备份
  5. Android源码解析:UI绘制流程之控件绘制
  6. CoreOS的Tectonic新发行版支持Kubernetes自我管理
  7. jqMobi(App Framework)入门学习(一)
  8. UIWebView中字体自动放大问题的探究
  9. 设计模式(八)之单例模式
  10. PowerShell入门