# 完全用 GNU/Linux 工作
### 10. Shell Script
Shell Scripts 說穿了就是把 bash 各種的指令 (command) 包進一個 Scripts 裡,並搭配條件判斷式、迴圈 (loop) 及應付各種狀況,更可與排程 (Cron Job) 結合進行週期性的作業。
隨著使用的指令及撰寫的 Scripts 增加,對電腦的整體觀念及熟悉度也會隨之提升。這種完全操控電腦的招式就藏在日常生活中,等著大家去發現!這就是為什麼凍仁會堅持要學習指令的原因,依賴圖形介面是難以得到累積的。以下就讓凍仁介紹些 Scripts。
### 使用 wget 下載指定檔案內的連結
原先凍仁都習慣用自己寫的 [wget-list.sh](https://github.com/chusiang/tuxENV/blob/master/home/bin/wget-list.sh) 來批次下載指定的檔案,但後來發現 wget 早就支援指定檔案下載的參數 *-i* 於此跟大家分享。
~~~
$ wget -i list.txt
~~~
### 使用 MD5 進行批次驗證
相信 MD5 批次驗證一功能在 Windows 上有不少的替代方案。但如果能直接在效能極佳的伺服器上進行離線作業不是更好?這支簡單的 Scripts 是個讓凍仁提早下班的壓箱寶呢!
建立批次產生驗證檔 script。 [[mirror]](https://github.com/chusiang/tuxENV/blob/master/home/bin/md5-make.sh)
~~~
$ cat md5-make.sh
#!/bin/bash
# Filename: md5-make.sh
# Info: make md5sum fils with list.txt
for X in $(cat list.txt); do
# 依序使用 md5sum 檢查當前目錄下所有檔案,並將其儲存其結果。
echo "md5sum $X > $X.sum " | bash
done
~~~
建立批次驗證 script。 [[mirror]](https://github.com/chusiang/tuxENV/blob/master/home/bin/md5-check.sh)
~~~
$ cat md5-check.sh
#!/bin/bash
# Filename: md5-check.sh
# Info: use md5sum check fils with list.txt
for X in $(cat list.txt); do
# 依序檢查當前目錄下所有的 .sum。
echo "md5sum -c $X.sum" | bash
# 使用背景執行 (&) 是個很好的加速方法,但當檔案過大或過多時會導致系統過於忙碌而無法進行其它作業。
#echo "md5sum -c $X.sum" | bash &
done
~~~
觀看當前目錄之檔案。
~~~
$ ls
index.htm index.html index.php md5-check.sh md5-make.sh
~~~
將欲驗證檔寫入 list.txt
~~~
$ ls index.* > list.txt; cat list.txt
index.htm
index.html
index.php
~~~
批次產生 MD5 驗證檔。
~~~
$ ./md5-make.sh
~~~
批次進行 MD5 驗證並儲存紀錄,事後就可藉由紀錄檔觀看整體的執行結果。
~~~
$ ./md5-check.sh | tee md5-result.log
index.htm: OK
index.html: OK
index.php: OK
~~~
### 資料來源
- [鳥哥的 Linux 私房菜 -- 學習 Shell Scripts](http://linux.vbird.org/linux_basic/0340bashshell-scripts.php)
- [柏青哥的 SuSE Linux -- 簡易的 Shell Scripts](http://www.suse.url.tw/sles10/lesson10.htm)
- [FreeBSD 6.0 架設管理與應用 -- 第二十一章 Shell Scripts](http://www.twbsd.org/cht/book/ch24.htm)
- [凍仁於 GitHub 上的 Shell Scripts](https://github.com/chusiang/tuxENV/tree/master/home/bin)
- [凍仁的筆記: Shell Scripts](http://note.drx.tw/search/label/Shell%20Scripts)
- 介紹
- 前言
- 建立開機媒體 (隨身碟、光碟)
- 網路設定
- 套件管理
- 套件庫及鏡像站
- 安裝驅動程式
- 簡易的防火牆 - UFW & GUFW
- 電源管理 - PowerTOP
- Hacking Bash
- Shell Scripts
- Hacking Vim
- Vim 套件管理 - NeoBundle
- Pentadactyl
- 色碼擷取器 - Gpick vs Gcolor2
- 文字界面的字典 sdcv
- 於 Vim 裡使用 sdcv
- 商業版的 Wine - CrossOver
- 藉由 CrossOver 安裝 Microsoft Office 2007
- 虛擬機器 - VMware Player 5
- 增進 SSH 使用效率 - ssh_config
- 遠端桌面軟體 - Remmina
- 密碼管理員 - FPM2
- 密碼管理員 - FPM2Droid
- 視窗管理及工作區 (上)
- 視窗管理及工作區 (下)
- 使用 Clonezilla 打造不死的作業系統
- Ubuntu 系統版本升級
- 使用 Live CD 修復 Debian/Ubuntu 系統
- 檢測硬碟 SMART 健康狀態
- 銷毀資料 - Shred
- 附录
- 將 Markdown 文件轉成 HTML