今次我們會繼續自學Programming的講解,學會Programming其中一個目的,是為您生活或工作帶來更多自動化的便利。

所以我們今天會為大家講解以下:

  1. Shell Programming是什麼?
  2. 一起用Shell編程,去實現自動化備份您的電腦;
  3. 我們也會提供自動化程序的下載

先介紹自己:
我是火星豬David! 是MARS tree的技術總監。在Programming方面已超過10年經驗,今天會和大家逐步實現自動化備份您的電腦

PS:如果你趕時間取得自動備份電腦的Shell Script 的話,可以直接按這裡下載

有什麼關於自學Programming方面的問題,你可以在下面留言區留言問我!*

Shell Programming是什麼?

Shell Programming 就是在UNIX系統中的BASH Shell中進行指令的編程,去實現不同電腦系統的自動化。對於系統管理員來說,自己學會Shell Programming 就是在UNIX,可以大量減省操作時間。

UNIX系統包括:

Shell Programming vs Linux Programming

講到這裡,可能有些人在外面會聽過Linux Programming, 那麼同時在Linux中的Shell, 有什麼不同呢?

Shell ProgrammingLinux Programming
操作層面在應用層面的操作,不會修改Linux 核心修改Linux 的核心
使用編程Shell ScriptC
修改難度容易困難
程序運行速度
操作功能功能會受限於BASH支持的指令功能較多,因為可以直接編輯Linux 核心

總括來說:
對於初學的朋友來說,最好先選擇Shell Programming,因為困難和風險都是較小,萬一改錯了Linux 的核心,那就gg了!

這裡也附上一個影片關於Shell script 的 基礎語法:

好吧!說了很多概念,不如我們進入實戰吧!

Shell Script編程: 實現自動化備份您的電腦

STEP1. 定義變量

我們會為Shell Script定義以下的參數:

  • 變量 backDir:是指需要備份的目錄;
  • 變量 destDir:是指備份之後壓縮檔存放的目錄;
  • 變量 numberOfDayFileKeep:是指備份壓縮檔存放的天數
#!/bin/bash
#
# 自動備份電腦Shell Script
#
backupDir="/home/davidchu/lession1" #需要備份的目錄
destDir="/home/davidchu/lession2/back_dir" #備備份之後壓縮檔存放的目錄
numberOfDayFileKeep=30 #備份壓縮檔存放的天數

STEP2. 開始為需要備份的目錄進行壓縮備份

這個步就是會為需要備份的目錄進行壓縮備份,我們會壓縮備份檔會以backup年月日時分秒.tar.gz 命名,儲放於$destDir

#!/bin/bash
#
# 自動備份電腦Shell Script
#
backupDir="/home/davidchu/lession1" #需要備份的目錄
destDir="/home/davidchu/lession2/back_dir" #備備份之後壓縮檔存放的目錄
numberOfDayFileKeep=30 #備份壓縮檔存放的天數

#壓縮檔會以backup年月日時分秒.tar.gz 命名
tar zcPf $destDir/backup`date +%Y%m%d%H%M%S`.tar.gz $backDir 

STEP3. 檢查存放的目錄中備份壓縮檔是否超過30天

以下是Programming 的過程及解釋:

  • for f in \ls -1r $dest\ :意思是把存放的目錄中備份壓縮檔按名稱由大於小排序,並給予變量 f 使用;
  • 變量 i :負責計算數量,在存放的目錄中數到一個文件時會加1;
  • let "i++" :幫變量i加1
#!/bin/bash
#
# 自動備份電腦Shell Script
#
backupDir="/home/davidchu/lession1" #需要備份的目錄
destDir="/home/davidchu/lession2/back_dir" #備備份之後壓縮檔存放的目錄
numberOfDayFileKeep=30 #備份壓縮檔存放的天數

#壓縮檔會以backup年月日時分秒.tar.gz 命名
tar zcPf $destDir/backup`date +%Y%m%d%H%M%S`.tar.gz $backDir 

i=0
for f in `ls -1r $dest`; do
    if [ i -ge 30 ]; then
        #進行刪除
    fi
    let "i++"
done

STEP4. 在存放的目錄中把備份壓縮檔存放超過30天刪除

我們會使用rm -rf $dest/$f 把過期的壓縮檔刪除,故此程序如下:

#!/bin/bash
#
# 自動備份電腦Shell Script
#
backupDir="/home/davidchu/lession1" #需要備份的目錄
destDir="/home/davidchu/lession2/back_dir" #備備份之後壓縮檔存放的目錄
numberOfDayFileKeep=30 #備份壓縮檔存放的天數

#壓縮檔會以backup年月日時分秒.tar.gz 命名
tar zcPf $destDir/backup`date +%Y%m%d%H%M%S`.tar.gz $backDir 

i=0
for f in `ls -1r $dest`; do
    if [ i -ge 30 ]; then
        #進行刪除
        rm -rf $dest/$f
    fi
    let "i++"
done

STEP5. 完成程序編寫!

恭喜您!您已經完成了自動備份的程序編寫了,之後就是設定你的電腦,實現自動備份。

來到這裡:

  • 如果大家遇到有問題,可以在留言區留言;
  • 如果覺得實用請分享給朋友,感謝

自動備份電腦Shell Script

以下Shell Script內容適合以下系統使用者:

Shell Script 調教

下面是自動備份電腦的Shell Script,可以自行修改的位置:

  • 變量 backDir:是指需要備份的目錄;
  • 變量 destDir:是指備份之後壓縮檔存放的目錄;
  • 變量 numberOfDayFileKeep:是指備份壓縮檔存放的天數

    火星豬David: 調教後便能自行使用了!

#!/bin/bash
#
# 自動備份電腦Shell Script
#
backupDir="/home/davidchu/lession1" #需要備份的目錄
destDir="/home/davidchu/lession2/back_dir" #備備份之後壓縮檔存放的目錄
numberOfDayFileKeep=30 #備份壓縮檔存放的天數

echo "START BACKUP $backupDir"; #開始做備份壓縮檔
tar zcPf $destDir/backup`date +%Y%m%d%H%M%S`.tar.gz $backDir #壓縮檔會以backup年月日時分秒.tar.gz 命名

i=0
for f in `ls -1r $destDir`; do
    if [ $i -ge 30 ]; then
        echo "REMOVE THE OLDEST FILE $destDir/$f" #如果壓縮檔存放超過30天,會被此程序刪除
        rm -rf $destDir/$f
    fi
    let "i++"
done

exit 1;

使用方法

macOS 用戶

macOS 可以用以下步驟實現自動排程:

  1. 請把上Shell Script複製到文件中 backup.sh
  2. 開啟終端機(Terminal);
  3. 執行 chmod +x ~/Documents/backup.sh 意思是開放系統執行權限;
  4. 執行 crontab -e;
  5. 按 "i" 進入INSERT MODE, 加上以下文字:
    0 0 * * * ~/Documents/backup.sh > /dev/null
  6. ESC,再按:wq儲存便可以了(意思是設定系統每天00:00執行備份)。

Linux 用戶

Linux 可以用以下步驟實現自動排程:

  1. 請把上面Shell Script複製到 /usr/local/src/backup.sh
  2. 執行 chmod +x /usr/local/src/backup.sh 意思是開放系統執行權限;
  3. 執行 echo "0 0 * * * root bash /usr/local/src/backup.sh > /dev/null" >> /etc/crontab
    意思是設定系統每天00:00執行備份
  4. 執行 service cron start,便可以了。

Shell Programming 常用情景有什麼呢?

最後我們也總結了下面一些情景,是需要到Shell Script

  • Senerio 1. 自動備份
  • Senerio 2. 自動send Email;
  • Senerio 3. 快速處理多個操作(生成大量檔);
  • Senerio 4. 自動下載網上的檔案;

我們會不斷補充相關的Shell Script 的指令的!
如果大家還想知道更多Shell Programming 的指令,記得訂閱我們了!