690 likes | 1.01k Views
Ubuntu 進階 ( 一 ) shell script 主講 : 廖凡磊. 國立中央大學電算中心 ubuntu 短期訓練課程. agenda. Shell introduction & features Shell script Q & A. part1:shell introduction and features. 為什麼要學習shell呢?. 因為他好用...廢話 快速好用的組合命令 分析系統記錄檔的利器 一輩子受用的工具. What is SHELL.
E N D
Ubuntu 進階(一)shell script主講:廖凡磊 國立中央大學電算中心 ubuntu 短期訓練課程
agenda • Shell introduction & features • Shell script • Q & A
為什麼要學習shell呢? • 因為他好用...廢話 • 快速好用的組合命令 • 分析系統記錄檔的利器 • 一輩子受用的工具
What is SHELL • the hard protective outer case of an animal such as a snail, shellfish, or turtle(from Oxford) • shell is a piece of software that provides an interface for users. (from wikipedia) • 橋樑 (from me)
登入ubuntu的流程 • getty–get terminal(tty) (ctrl+alt+f1-f7) • login--authenticate the user • shell–provides an interface between user and kernel • logout-- good bye
程式執行流程 • 人下命令給shell • shell對kernel下命令 • kernel對hardware執行工作,並回收結果 • kernel回傳給shell • shell 顯示出執行結果 • kernel 又是什麼呢?? key: 其實DOS時代也有shell,就是command.com
kernel • 以人來比喻的話,shell就像是語言 shell也是一種ap 各種硬體設備
/etc/shells • /bin/csh (c-like shell) • /bin/sh (目前由dash所取代) • /bin/ksh (kornshell, by AT&T Bell LAB) • /bin/tcsh (enhanced csh, is FreeBSD default login shell) • /bin/bash (bourne-again shell, is ubuntu defaul login shell) • /bin/dash (debian almquist shell,強調快速及檔案小)
操作1: • 看目前所使用的shell類型 • echo $SHELL • cat /etc/passwd • /bin/false ?? • 換shell • chsh • 注意:請務必打完整的shell位置,不然會很麻煩
如何選擇自己要用的shell • 師法於你的朋友們 • 愛用預設值 • BSD default shell ->csh/tcsh • Linux default shell -> sh/bash • 學習哪一套unix-like OS 也是一樣的
bash 的特色 • Job control • Aliases • Shell functions • Directory stack • Command history • Command line editing • Vi Command line editing • Filename completion
設定你的bash環境 • 登入: • /etc/profile --全域 • ~/.bash_profile -- login時用到 • ~/.bash_login -- login時用到 • ~/.profile -- login時用到 • ~/.bashrc -- subshell產生時會用到 • 登出: • ~/.bash_logout
實用的一些設定 in ~/.bashrc • grep 有顏色 • alias grep='grep --color' • man 有顏色 • export LESS_TERMCAP_mb=$'\E[01;31m' • export LESS_TERMCAP_md=$'\E[01;31m' • export LESS_TERMCAP_me=$'\E[0m' • export LESS_TERMCAP_se=$'\E[0m' • export LESS_TERMCAP_so=$'\E[01;44;33m' • export LESS_TERMCAP_ue=$'\E[0m' • export LESS_TERMCAP_us=$'\E[01;32m'
跟嗶嗶聲說不 • tab補齊時的嗶嗶聲 • in ~/.inputrc • set bell-style none #關閉 • set bell-style visible #開啟 • vim錯誤指令時的嗶嗶聲 • in ~/.vimrc • set vb ”關閉 • less錯誤時的嗶嗶聲 • in ~/.bashrc • alias less='less -Q' #關閉所有的錯誤報告
路徑問題 • 絕對路徑 • 由 / 開始的路徑 • 相對路徑 • 不是用 / 開始的路徑 • . #當前的目錄 • .. #上一層目錄 • ~ #家目錄 等於/home/userName • tip: • 寫shell script時最好是用絕對路徑 • 如果查指令的絕對路徑 • which command
指令複習 • cd • mkdir • ls • ps • grep • who • rm • date
指令複習二 • pwd • cp • mv • cat • less
bash的基本認識 • 指令運用 • 工作控制的運用 • 輸入,輸出資料重導向 • 管線的觀念與運用 • 萬用字元的運用 • history的設定與運用 • 別名的設定與運用 • 引號的觀念及運用 • 變數的運用 • 數值運算
指令的運用(1) • 單一指令 • pwd • ps -aux • netstat -an • 連續指令 • mkdir ~/tempDir; cp ~/.* ~/tempDir; ls ~/tempDir
指令的運用(2) • 條件式指令 • grep google sampleCom.txt && more sampleCom.txt • grep google sampleCom.txt || echo “no” • gcc prog.c || echo ‘compile error’ • && -> it means than,指令1失敗則不會執行後者 • || ->it means else,指令1成功則不會執行後者 • 指令類別 • 內建命令(built-in command) • 一般程式(utility) • 如果辨別: which command
指令運用(3) • 指令列的格式 • command option arguments • ls -al ~ • rm -i test.txt • echo ”hello world” • 遇到問題時 • man–可靠的男人,man command • info command • option中 加上-h,--help
command-line editing • C-w 往前刪除一個字。 • M-f 往前一個字 • M-b 往後一個字 • C-u 刪除前面所有字元 • C-k 刪除後方所有字元 • C-l 清除螢幕 • C-r 往前搜尋指令 ( 非常好用 ) • C-xC-e 可以使用 vim 寫入 script 讓他一次執行。
輸入,輸出重導向 • > Output Redirection • >> Appending Output Redirection • < Input Redirection • << keyword input redirection
輸入,輸出重導向 Ex. • Shell@ncucc> ls > ls.out • shell@ncucc> cat > text.out • Shell@ncucc> who >> ls.out • shell@ncucc> cat > text.out << eof • shell@ncucc> mail orz@orz.orz << mailBody
管線的觀念與運用 • command1 | command2 • 將指令1的結果當作指令2的輸入 • [user@ncucc]$cat /etc/passwd | grep false • [user@ncucc]$history | less
萬用字元的運用 • * • 可以代替任何字元 • ? • 可以代替一個字元 • [...] • 可以代替中括號內的任何一個字元
萬用字元的運用 Ex shell@ncucc> touch a.c; touch b.c;touch cc.c;mkdir dir1;mkdir dir2 shell@ncucc> ls *.c a.c b.c cc.c shell@ncucc> ls ?.c a.c b.c shell@ncucc> ls [ac]* a.c b.c shell@ncucc> ls [A-Za-z]*
history 的運用與設定 • history • 觀看歷史指令 • !! • 執行上一個指令 • !n • 執行第n個指令 • !string • 搜尋以某字串 string為開頭的過去並加以執行 • 搜尋時以event數字大到小 • !?string? • 搜尋過去指令中有某個字串的指令
別名設定與運用 • 設定alias name='command' • 解除 unalias name • 顯示全部設定 alias • 顯示某個設定 alias name • 可以在一開始就設定在~/.bashrc
alias 好用設定 • alias name=command #注意等號兩旁沒空格 • alias ls='ls -aF --color=always' • alias ll='ls -l' • alias search=grep • alias mcd='mount /mnt/cdrom' • alias ucd='umount /mnt/cdrom' • alias mc='mc -c' • alias ..='cd ..' • alias ...='cd ../..'
工作控制的運用 • 什麼是job control • 前景工作 • 需等待提示符號出現才能進行下個動作 • 背景工作 • 在一般的指令後面加個 & • 常用的指令 • Ctrl+c 中斷指令 • Ctrl+z 放入背景,並暫停其指令 • bg %1 讓編號1的工作在背景執行 • fg %1 讓編號1的工作在前景執行
工作控制的運用 Ex. • vim hello.sh • Ctrl + z 放入背景 • fg 跳回去vim編輯介面
引數的觀念及運用 • 單引號single quote(') • 兩個單引號中的內容是不變的 • 雙引號double quote(”) • 對自動替換雙引號中的特殊字元 • 雙數 • 倒單引號back quote(`) • 會先被執行 • 如果將倒單引號放在單引號中,會沒有作用
引號的觀念及運用--範例 % color=red % echo “$color” red % echo ‘$color’ $color % echo “There are `who | wc -l` people online” There are 1 people online
變數(1) • 印出變數的內容 • echo $HOME • echo $PATH • 設值 • = • 等號兩邊不能直接接空白字元; • 變數名稱只能是英文字母與數字,但是數字不能是開頭字元;
變數(2) • 鍵盤讀取變數 • read variable • read –p”提示字串:”variable • echo $variable • 陣列 • var[index]=content • echo ${var[index]}
變數(3) • 環境變數 • env • set • export • 變數名稱 • HOME • SHELL • HISTSIZE • PATH • LANG
習題 • 如何利用last將你今天登入過的資訊印出來 • 如何讓檔案在刪除時會提醒是否真要刪除 • 如何秀出在/bin底下任何以a為開頭的檔案檔名的詳細資料
解答 • last | grep account • alias rm = ‘rm -i’ • ls –al /bin/a*
數值運算 • variable=$((1+2)) • declare -i variable=6/2 • let variable=1*2 • 整數 • 範例 • ((i++)) 等於 let i++ 等於 i=$((i+1)) 等於 i=$(($i+1)) • ((C=A+B)) 等於 let C=A+B 等於 C=$((A+B)) 等於 C=$(($A+$B))
比爾蓋的e化生活 蓋茲改裝他的豪宅,全面電子化,而且全部使用Windows,過不久他發現一些問題1. 每次回家,前門打開的時間要花費兩到三分鐘。 2. 馬桶要沖水以前會詢問。「馬桶沖水會造成大便無法回收,您確定要沖馬桶嗎?」 3. 微波爐和烤箱在要快完成以前會突然跳開,面板顯示:「系統發生無法回復的錯 誤, 您要在試一遍嗎?」 4. 有時一些小東西突然不能使用的時候,如果試圖修復,會造成房子全倒需要整座房子重建。 5. 如果你把窗戶全部打開,房子會突然停電,並且發出「系統資源不足,請您關閉一些窗戶。」 6. 淋浴的時候熱水器會自動進入省電模式,需要甩兩下蓮蓬頭才會恢復供應熱水。 7. 小偷闖入時,電視會自動打開,並且顯示整間房子的地圖。小偷可以按HELP鍵取得貴重物品放哪裡的資訊。 8. 要使用電梯以前,必須先輸入用戶名稱及密碼然後聽電腦語音介紹如何使用電梯與逃生設備十分鐘。 9. 所有買的新家具必須是 Microsoft 相容產品,否則會導致冰箱內物品遺失或烤麵包機烤焦麵包等的問題,嚴重時會造成房子倒塌。 10. 蓋茲要跟老婆親熱的時候,床鋪語音會自動詢問:「這樣有得性病的危險性,是否要繼續?」使用保險套時則會不斷要求:「已經有新款式,是否要更新?」
什麼是shell script • script == 腳本,劇本 • 批次檔 in dos • 由很多指令集合而成的可執行文字檔
學習shell script的好處 • 自動化管理 • 連續的指令單一化 • 用檔案把許多指令包在一起 • reuse • 跨平台且學習歷程短
Editor(1) • Vim • 預設的編輯軟體 • 可大量存取文字檔 • 擴充性強
Editor(2) • Nano • 容易入門 • 編輯提示
Hello Bash World • 建立實習目錄 Shell@ncucc>>mkdir cctraining;cd cctraining • 開檔 Shell@ncucc>>nano first.sh #!/bin/bash #program: # this is show “hello world” #date:2007/10/16 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo “Hello Bash World!!” • 離開nano ctrl+x • Shell@ncucc>bash first.sh
解說 • 用什麼來寫shell script • vim • nano • gedit • 註解 • # 以#開頭的文字不會被解譯 • 如何執行寫好的shell script • chmod +x filename.sh;./filename.sh • bash filename.sh
good habit for write bash • 多用註解 • # • header • script 的功能; • script 的版本資訊; • script 的作者與聯絡方式; • script 的版權宣告方式; • script 的 History (歷史紀錄); • script 內較特殊的指令,使用絕對路徑的方式來下達; • script 運作時需要的環境變數預先宣告與設定。