shell腳本雙重循環找不同

昨天檢查郵件服務器的時候發現一個大問題,原來部份已經刪除的用戶的郵件目錄並沒有被刪除,檢查了extman的設置,確認同時刪除用戶目錄已經check了,但是還是不成功,我估計是因爲我沒有執行suexec的原因,導致沒有成功刪除。現自已寫一個腳本,放到crontab中,每週運行一次。或手動運行

 現需要寫一個腳本,根據用戶目錄清單對比mysql中的用戶找到存在目錄,但不存在用戶的數據。因此得出如下結論:

目錄的集合肯定是大於用戶集合,因此只找目錄集合在用戶集合中不存在的數據即可。

 

  1. #!/bin/sh 
  2.  
  3. #########################################333 
  4. #檢查已經刪除的郵件用戶的郵件存儲目錄是否已經刪除 
  5. #通過對比郵件數據保存目錄列表和mysql用戶表數據對比 
  6. #標記爲‘是’的目錄將會被移動到第二個參數指定的目錄 
  7.  
  8. if [ "$#" -ne 2  ]; then 
  9.        echo Usage: $0 mysqlPasswordOfRoot DestFolderOfBackup 
  10.         exit 1; 
  11. fi 
  12. #     SQL 
  13. sqluser=root #mysql查詢登錄的用戶 
  14. sqlPasswd=$1 #mySQL密碼 
  15.  
  16. #      執行查詢用戶並保存在sqlUsers數組中 
  17. sqlUsers=$(echo 'select username from extmail.mailbox;' | mysql -u$sqluser -p$sqlPasswd |awk -F'@' 'NR>=2 { {print $1}}'
  18. #sqlUsers=$(mysql -uroot -p$sqlPasswd -e "select username from extmail.mailbox;"
  19.  
  20.  
  21. basedir="/data/mail/domain.com" #郵件保存目錄的父目錄 
  22. userMailbox=$(ls -k $basedir|awk '{print $1}')   #生成目錄列表數組 
  23.  
  24. #    源目錄 
  25. if [ ! -d $basedir  ]; then 
  26.      echo $basedir does not Exist, please  check
  27.         exit 1 
  28. fi 
  29.  
  30. #    備份目錄 
  31. sourseDir=$basedir 
  32. destDir=$2 
  33. if [ ! -d $destDir ]; then 
  34.    echo $destDir does not exist,please create
  35.    exit 1 
  36. fi 
  37.  
  38.  
  39. #export isDirExist 
  40. #雙重循環對比兩個數組,如果目錄名稱在SQL數據庫中找到這置isDirExist的值爲1x,否則爲值0x. 
  41. for dir in $userMailbox 
  42. do 
  43.  
  44. isDirExist="0x" 
  45.         for user in $sqlUsers 
  46.         do 
  47.                 if [ "$dir" = "$user" ]; then 
  48.                         isDirExist="1x" 
  49.                         break 
  50.                 fi 
  51.         done 
  52.  
  53. if [  "$isDirExist" = "0x" ]; then 
  54. #       echo $isDirExist":"$dir 
  55.         echo "mv $basedir/$dir $destDir" 
  56. #        mv  $basedir/$dir $destDir 
  57. fi 
  58. done 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章