今次我們會繼續自學Programming的講解,學會Programming其中一個目的,是為您生活或工作帶來更多自動化的便利。
所以我們今天會為大家講解以下:
- Shell Programming是什麼?
- 一起用Shell編程,去實現自動化備份您的電腦;
- 我們也會提供自動化程序的下載
先介紹自己:
我是火星豬David! 是MARS tree的技術總監。在Programming方面已超過10年經驗,今天會和大家逐步實現自動化備份您的電腦PS:如果你趕時間取得自動備份電腦的Shell Script 的話,可以直接按這裡下載
有什麼關於自學Programming方面的問題,你可以在下面留言區留言問我!*
Table of Contents
Shell Programming是什麼?
Shell Programming 就是在UNIX系統中的BASH Shell中進行指令的編程,去實現不同電腦系統的自動化。對於系統管理員來說,自己學會Shell Programming 就是在UNIX,可以大量減省操作時間。
UNIX系統包括:
Shell Programming vs Linux Programming
講到這裡,可能有些人在外面會聽過Linux Programming, 那麼同時在Linux中的Shell, 有什麼不同呢?
Shell Programming | Linux Programming | |
---|---|---|
操作層面 | 在應用層面的操作,不會修改Linux 核心 | 修改Linux 的核心 |
使用編程 | Shell Script | C |
修改難度 | 容易 | 困難 |
程序運行速度 | 慢 | 快 |
操作功能 | 功能會受限於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 可以用以下步驟實現自動排程:
- 請把上Shell Script複製到文件中
backup.sh
; - 開啟終端機(Terminal);
- 執行
chmod +x ~/Documents/backup.sh
意思是開放系統執行權限; - 執行
crontab -e
; - 按 "i" 進入INSERT MODE, 加上以下文字:
0 0 * * * ~/Documents/backup.sh > /dev/null
- 按
ESC
,再按:wq
儲存便可以了(意思是設定系統每天00:00執行備份)。
Linux 用戶
Linux 可以用以下步驟實現自動排程:
- 請把上面Shell Script複製到
/usr/local/src/backup.sh
; - 執行
chmod +x /usr/local/src/backup.sh
意思是開放系統執行權限; - 執行
echo "0 0 * * * root bash /usr/local/src/backup.sh > /dev/null" >> /etc/crontab
意思是設定系統每天00:00執行備份 - 執行
service cron start
,便可以了。
Shell Programming 常用情景有什麼呢?
最後我們也總結了下面一些情景,是需要到Shell Script
- Senerio 1. 自動備份;
- Senerio 2. 自動send Email;
- Senerio 3. 快速處理多個操作(生成大量檔);
- Senerio 4. 自動下載網上的檔案;
我們會不斷補充相關的Shell Script 的指令的!
如果大家還想知道更多Shell Programming 的指令,記得訂閱我們了!
留言