Shell指令碼:向磁碟中批量寫入資料

來源:互聯網
上載者:User

標籤:http   io   ar   使用   sp   for   檔案   資料   div   

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
  • 相關文章推薦:
  • 監控磁碟空間使用率的指令碼
  • linux 查看磁碟IO狀態的方法
  • 監視遠程磁碟的健康情況的shell指令碼
  • 本文來自:愛好Linux技術網
  • 本文連結:http://www.ahlinux.com/shell/9024.html

Shell指令碼:向磁碟中批量寫入資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.