330 likes | 567 Views
Shell Script 程式設計. 鄧姚文. 教材. 陳源謙( 2010 ), Ubuntu Linux 管理與架站實務, 博碩文化股份有限公司, ISBN 978-986-201-389-2 (書號 OS30004 ) 湯秉翰( 2013 ), CentOS Linux 系統建置與實務 ( 第二版 ) , 博碩文化股份有限公司, ISBN 978-986-201-764-7 (書號 OS31312 )
E N D
Shell Script程式設計 鄧姚文
教材 • 陳源謙(2010), Ubuntu Linux 管理與架站實務, 博碩文化股份有限公司, ISBN 978-986-201-389-2 (書號 OS30004) • 湯秉翰(2013), CentOS Linux系統建置與實務(第二版), 博碩文化股份有限公司, ISBN 978-986-201-764-7 (書號 OS31312) • 鳥哥(2011), 鳥哥的Linux私房菜--伺服器架設篇(第三版), 碁峰資訊股份有限公司, ISBN 9789862579329 (書號 ACA016100)
章節大綱 • 認識 shell • 認識 Shell Script • 變數 • 控制結構 • 程式迴圈
簡介 • 如果系統管理員每一件事情都要親自動手,絕對忙不過來 • 很多工作可以藉由 Shell Script 自動化 • 維護 log • 清除垃圾 • 套件更新 • 報告入侵事件
認識 Shell(殼層) • 介於使用者與系統核心之間的仲介程式 • 提供人機介面 • 接受使用者下達的指令,驅動作業系統完成工作 • 常見的 Shell: • Bourne Shell • 執行檔 sh,通常是 /bin/sh • UNIX 的標準配備,root 預設的 shell • C Shell • 執行檔 csh,通常是 /bin/csh • 工作排程控制、指令歷史、別名(alias) • Tenex C Shell • 執行檔 tcsh,基於 csh • 改進指令列的編輯 • Korn Shell • 執行檔 ksh,基於 Bourne Shell • 加上 tcsh 的 alias、job controll、指令列編輯 • Bourne Again Shell • 執行檔 bash • GNU 的產品
練習 • 執行下列指令檢查目前使用者的 Shellecho $SHELL • 執行下列指令檢查 Shell 程式的詳細資訊file $SHELL • 執行下列指令檢查系統可用於登入的 Shell 有哪些cat /etc/shells • 執行下列指令安裝 tcshsudo apt-get install tcsh • 執行下列指令檢視 tcsh 的位置which tcsh • 執行下列指令將登入的 Shell 變更為 tcshchsh -s `which tcsh`
什麼是 Shell Script ? • 一種程式 • 變數 • 條件判斷 • 迴圈 • 純文字檔案 • 指令為 Linux Command 系統指令【export】即可列出當前的所有變數
什麼是 Shell Script ? • 指令【echo】及「變數名稱」亦可以直接顯示指定變數的資料值 • 預設的環境變數隨著所採用的Shell 不同將有所差異。以Bash 為例,所列出的環境變數包括:
什麼是 Shell Script ? • Shell script 指令分成系統指令( 例如: ls、cat、rm、ps、tail、cp) 與 shell 指令(case、loop、if 等 shell 直接解譯的指令)。
Shell Schrip如何執行? • 變更程式權限為可執行 • chmod 755 或 chmod +x • ./helloworld.sh • 使用 sh執行指定的 Shell script
變數 • Shell 本身會建立環境變數,例如:當前登入之使用者帳號(USER)、當前所在的目錄路徑(PWD)、當前使用者帳號的家目錄(HOME) 等等,這些都是由Shell 預先訂定的。 • 變數的自訂 幾個為定義變數的範例: MYNAME="Frank" AGE=30 CURRENT_DATE=`date +%Y%m%d`
變數 • 變數的取值 • 在變數前方,冠上「$」就能夠輸出變數的值 • 定義名稱為「CURRENT_DATE」,該變數的值來自於SHELL 本身指令date 的執行結果
控制結構 • 因應狀況的變化採取不同的措施 • 條件判斷 • if-else • case
控制結構 if-else • and : && • or : ||
控制結構 if-else • 檔案屬性運算符
控制結構 if-else • 檔案屬性運算符
控制結構 if-else • 比較數值
控制結構 if-else • 比較字串
if 控制結構範例 • 透過 if [ -d /root/autobackup ] 判斷指定路徑的資料夾是否存在,若不存在,則執行 mkdir 建立資料夾,再進行資料庫匯出備份的動作。
if 控制結構範例 • 透過 if [-ge] 和 if [-le] 分別判斷輸入的數值,是否大於等於90,或者小於等於60分,若符合兩者其一的條件,便顯示對應的訊息。
練習: 控制結構 case • 以下列指令觀察 rsync服務的程式內容cat /etc/init.d/rsync
程式迴圈 • 重複執行 • for 迴圈 • while 迴圈 • until 迴圈
程式迴圈 until • 與 while 迴圈相反 • 當條件為假時執行迴圈,條件為真結束迴圈
程式迴圈 until 執行結果
本章結束 Q&A討論時間