使用shell指令碼自動清空建立並格式化硬碟

來源:互聯網
上載者:User

作業3:

要求如下:

寫一個指令碼:

1、建立一個函數,可以接受一個磁碟裝置路徑(如/dev/sdb)作為參數;在真正開始後面步驟之前提醒使用者有危險,並讓使用者選擇是否繼續;

而後將此磁碟裝置上的所有分區清空(提示,使用命令dd if=/dev/zero of=/dev/sdb bs=512 count=1實現,注意其中的裝置路徑不要寫錯了);如果此步驟失敗,返回67給主程式;

接著在此磁碟裝置上建立兩個主要磁碟分割,一個大小為100M,一個大小為1G;如果此步驟失敗,返回68給主程式;

格式化此兩分區,檔案系統類型為ext3;如果此步驟失敗,返回69給主程式;

如果上述過程都正常,返回0給主程式;

2、調用此函數;並通過接收函數執行的傳回值來判斷其執行情況,並將資訊顯示出來;

代碼如下:

#!/bin/bash  #Author: MOS  #Script name: funPart.sh  #Date & Time: 2012-10-10/12:20:53  #Version: 1.0.1  #Description:  #  Disk_Mod(){  #使用if匹配模式,使用for迴圈判斷是否存在,如果有,則取其絕對路徑,跳出迴圈,如果不匹配或檔案不存在,跳出函數,返回66  if [[ -n $1 && $1 =~ "/dev/sd[a-z]" ]];then     local Darray=(`ls /dev/sd[a-z]`)      for i in ${Darray[*]};do        [[ "$i" == "$1" ]] && Sd=$i && break    done  else    return 66  fi  #當匹配成功,進入選擇,告訴使用者,是否繼續,輸錯的話進入無限迴圈,當使用者選擇Y,則清空目標資料分割,且跳出while迴圈      while :;do        read -p "Warning!!!This operation will clean $Sd data. Next=y,Quit=n [y|n]: " Choice          case $Choice in        y)              dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null && break || return 67 ;;          n)              exit 88 ;;          *)              echo "Invalid choice,please choice again." ;;          esac      done  #使用echo傳遞給fdisk進行分區,如果此命令失敗,則跳轉出去,錯誤值68,需要注意的是,有時候這個傳回值很詭異,筆者之前成功與否都是返回的1,後來重啟之後,就好了,如果謹慎的話,可以對建立的分區,進行判斷,不過就需要使用其他工具截取相關欄位了,雖有些小麻煩,但無大礙  echo -e "n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n"|fdisk /dev/sdb &> /dev/null || return 68  #格式化之前,讓核心重新讀取磁碟分割表,值得注意的是,有的系統版本,使用partprobe無效,譬如筆者的環境是rhel5.8,而rhel6.0以後,這個命令就很危險了,而使用partx -a /dev/sdb則效果更好...此項需謹慎,如果格式化失敗,則告知把失敗的分區定義成變數,且跳出函數,並帶出錯誤值69      `partprobe`      Part=`fdisk -l /dev/$Sd|tail -2|cut -d" " -f1`      for M in ${Part[*]};do        ! mke2fs -j $M &> /dev/null && ErrorPart=$M && return 69      done  return 0  }  #下面代碼,調用函數,接收函數傳回值,根據傳回值進行判斷哪裡出錯。  Disk_Mod $1  Res=$?  [ $Res -eq 0 ] && exit 0  [ $Res -eq 66 ] && echo "Error! Invalid input."[ $Res -eq 67 ] && echo "Error! Command -> dd <- Faild."[ $Res -eq 68 ] && echo "Error! Command -> fdisk <- Faild."[ $Res -eq 69 ] && echo "Error! Command -> mke2fs <- Faild."

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/Linux/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.