《Bash腳本編程基礎(chǔ)》ppt課件_第1頁(yè)
《Bash腳本編程基礎(chǔ)》ppt課件_第2頁(yè)
《Bash腳本編程基礎(chǔ)》ppt課件_第3頁(yè)
《Bash腳本編程基礎(chǔ)》ppt課件_第4頁(yè)
《Bash腳本編程基礎(chǔ)》ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Bash腳本編程根底xxxxlitencent 課程目的 掌握Bash的類(lèi)型與配置 掌握Bash根本語(yǔ)法 掌握監(jiān)控程序的編寫(xiě) 掌握Bash構(gòu)造化編程內(nèi)容導(dǎo)航 Bash根底 Bash語(yǔ)法 監(jiān)控實(shí)例Bash根底 Shell與Bash、sh Bash的類(lèi)型 Bash命令的解釋過(guò)程 Bash與Vim配置Shell偽終端偽終端SHELLSHELL循環(huán)接收循環(huán)接收用戶輸入用戶輸入解釋執(zhí)行解釋執(zhí)行OSOS硬盤(pán) I/O網(wǎng)絡(luò) I/O其它操作用戶側(cè)用戶側(cè)主機(jī)側(cè)主機(jī)側(cè)控制臺(tái)控制臺(tái)用戶用戶TermTermKernelKernelBash的類(lèi)型Login BashInteractive BashBash Scripts

2、Login Bash 什么是 Login Bash Login 時(shí) Bash做了什么全局配置 /etc/profile個(gè)人配置/.bash_profile/.bash_login/.profile咦, 好似沒(méi)提到/etc/profile.d/ ?SUSE: 確保文件可讀SLK: 確保文件可讀可執(zhí)行Login sh login sh和login bash是一樣的嗎?Login sh只讀取:/etc/profile/.profile查看: ps; /etc/passwd指定: useradd -s /bin/bash修改:usermod, chshInteractive Bash 什么是交互式Ba

3、sh 啟動(dòng)交互式Bash時(shí),Bash做了什么/etc/bash.bashrc/.bashrcsource 為了統(tǒng)一管理,在login 的時(shí)候自動(dòng)執(zhí)行 /.bashrctest -r $HOME/.bashrc & source $HOME/.bashrc更詳細(xì)資料見(jiàn) man bash: INVOCATIONBash腳本常見(jiàn)問(wèn)題: #! /bin/bash 的位置 來(lái)自windows的CRLF的換行符 腳本的權(quán)限位 Bash的退出碼Bash腳本的執(zhí)行 父shell Fork一sub-shell Sub-shell繼承父shell環(huán)境 Sub-shell調(diào)用指定的解釋器解釋執(zhí)行該腳本 Su

4、b-shell退出, 相關(guān)環(huán)境被銷(xiāo)毀 父shell獲得sub-shell的退出狀態(tài)1、brace expansion花括號(hào)擴(kuò)展2、tilde expansion波浪線擴(kuò)展3、parameter,variable expansion變量擴(kuò)展4、arithmetic expansion算術(shù)擴(kuò)展5、command substitution命令交換6、word splitting詞的拆分7、pathname expansion途徑名擴(kuò)展可擴(kuò)展成用戶的$HOME值cd echo samlivar=samli將帶$的變量名擴(kuò)展成變量值var=xzyecho $var整數(shù)算術(shù)運(yùn)算 i+ 10 = 5 sum

5、 = i + j Sum=$ I + j echo 1.10mkdir /data1,2,3,4a=/a/b/cecho $a%/* $a#*/變量值按空白符、換行拆分, 如var=a b cfor v in $var; do echo $vdone獲得命令的輸出:Today=$ date +%F Line=$ grep xxx yyy 通配符擴(kuò)展成文件名rm *.bakls ?.bakiso=$ ls xXpP.iso hdd=$ ls /dev/sda1-9*Bash命令的解析過(guò)程Bash腳本與Vim配置 /etc/vimrc 或 /.vimrc中配置syntax on 語(yǔ)法高亮set n

6、umber 顯示行數(shù)set shiftwidth=4 四格縮進(jìn)set tabstop=4 四格縮進(jìn)set expandtab tab轉(zhuǎn)spaceset bg=light 背景為亮色color murphy 配色方案內(nèi)容導(dǎo)航 Bash根底 Bash語(yǔ)法 監(jiān)控實(shí)例 變量 數(shù)值運(yùn)算 流程控制 函數(shù)Bash語(yǔ)法變量 變量定義:name=value 變量引用:$name注意: =號(hào)兩邊不允許空格 $name是$name的簡(jiǎn)寫(xiě)變量 命令交換 command $ command # 推薦例files=$ ls *.bak today=$ date +%F lines=$ cat file 常用變量$?上個(gè)命

7、令的退出狀態(tài)$!最后一個(gè)后臺(tái)進(jìn)程的pid$0當(dāng)前腳本的名字$當(dāng)前腳本的pid$nn為1,2.n, 腳本或函數(shù)的參數(shù)$腳本或函數(shù)的所有參數(shù)$#腳本或函數(shù)的參數(shù)個(gè)數(shù)$UID當(dāng)前用戶的uid$LOGNAME當(dāng)前用戶名$HOSTNAME主機(jī)名$RANDOM1-32767間的隨機(jī)數(shù)$SECONDS已經(jīng)消耗的秒數(shù)$PWD當(dāng)前的工作目錄$OLDPWD最后一次cd前的工作目錄$HISTTIMEFORMAT ?環(huán)境變量 環(huán)境變量是Bash或用戶預(yù)設(shè)置的變量,可被繼承并直接使用 有些環(huán)境變量會(huì)影響shell的行為$PATH命令搜索途徑名$LANGlocale$LC_ALLlocale$TERM終端類(lèi)型,一般為xt

8、erm$EDITOR系統(tǒng)默認(rèn)編輯器環(huán)境變量的設(shè)置 export name=value; bash foobar.sh name=value ./foobar.sh 更多信息請(qǐng) man env 更多變量見(jiàn) man bash: Shell Variables問(wèn)題在哪設(shè)置JAVA_HOME,讓所有用戶皆可使用按上面的設(shè)置后,rc.local中 執(zhí)行以下命令可否成功 /usr/local/apache-tomcat/bin/start.sh環(huán)境變量要注意的 變量需要export才能被子進(jìn)程看到成為環(huán)境變量 大部分的環(huán)境變量在login時(shí)被設(shè)置 要注意locale對(duì)程序輸入輸出的影響數(shù)值運(yùn)算 運(yùn)算工具

9、let, expr bc 常用運(yùn)算 + - * / % 加,減,乘,除,取模 更詳細(xì)內(nèi)容:man bash: ARITHMETIC EVALUATIONi=10; j=20; i+ cnt = i + j cnt=$ i + j 管道與here docbc支持浮點(diǎn)數(shù)運(yùn)算但bc是交互式的, 怎么辦?bc EOF# EOF稱為占位符scale = 3# 輸入的內(nèi)容10 / 3EOFecho scale = 3; 10 / 3 | bc流程控制 條件判斷 if case 循環(huán) for, while break, continueif . then if . 語(yǔ)句用于判斷一個(gè)/一組命令是執(zhí)行否成功 表

10、達(dá)式,測(cè)試字符串,文件 表達(dá)式,測(cè)試數(shù)值計(jì)算結(jié)果 bash命令,測(cè)試命令是否執(zhí)行成功 命令的退出碼 $? 為0時(shí),代表true字符串測(cè)試測(cè)試測(cè)試意義意義 -n $str $str 不為空值 -z $str $str 為空值 $str1 = $str2 相等 $str1 != $str2 不等文件測(cè)試 更詳細(xì)內(nèi)容 man bash CONDITIONAL EXPRESSIONS用法意義用法意義 -b $file 塊設(shè)備 -r $file 文件可讀 -c $file 字符設(shè)備 -s $file 文件大小不為零 -d $file 目錄 -w $file 文件可寫(xiě) -e $file 文件存在 -x $

11、file 文件可執(zhí)行 -f $file 普通文件 -p $file 命名管道if . else .if expression; then elif expression; then else fi判斷OSif -f /etc/SuSE-release ; thenecho SUSE OSelif -f /etc/slackware-version ; then echo Slackware OSelseecho “Redhat ?fi命令的退出狀態(tài) 檢查 $? 的值是否為0, 0為真,非0為假grep -wq admin /etc/passwd if $? = 0 ; then echo “f

12、oundelse echo “not foundfiif grep -wq admin /etc/passwdthen echo “foundelse echo “not foundficase# 語(yǔ)法case $var incondition1 Statments1 ;condition2 statments2 ;* default statments;esacread answercase $answer inyesecho yes ;noecho no ;*echo unknown ;esaccase中的字符匹配 * 匹配零個(gè)或多個(gè)任意字符 ?匹配一個(gè)任意字符 字符組,可以匹配組中的一個(gè)

13、字符 |A|B, A或者Bcase中的字符匹配case $answer inYyEeSsecho Answer is yes;NnOoecho Answer is no;*echo unknown;esaccase $answer inyes|yecho Answer is yes;no|necho Answer is no;*echo unknown;esacwhile循環(huán)形式1while expression; do statmentsdone 形式2until expression; do statementsdone #examplei=1sum=0while i = 100 ; do

14、 sum += i i+ doneecho sum: $sum統(tǒng)計(jì)行數(shù)#! /bin/bashfile=$0 # 腳本本身Cnt=0# 行數(shù)cat $file | while read; do # 關(guān)鍵 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 會(huì)是我們期望的結(jié)果嗎#! /bin/bashfile=$0 # 腳本本身Cnt=0# 行數(shù)cat $file | while read; do # 關(guān)鍵 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 會(huì)是我們期望的結(jié)果嗎#! /bin/b

15、ashfile=$0 # 腳本本身Cnt=0# 行數(shù)cat $file | while read; do # 關(guān)鍵 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 會(huì)是我們期望的結(jié)果嗎#! /bin/bashfile=$0cnt=0while read; do ( cnt + ) echo -e $cnt:t$REPLYdone fileecho xxx 1 fileread line log.err some_com /dev/null 2&1 some_com & /dev/null塊重定向-1if $error ; t

16、hen echo “error: $error “$logelse echo “ok “$logfiif $error ; then echo “error: $errorelse echo “okfi “$log#! /bin/bashfile=$0cnt=0while read; do cnt + echo -e $cnt:t$REPLYdone $file.log塊重定向-2 echo message 1 “$log echo message 2 “$log echo message 3 “$log echo message 1 echo message 2 echo message 3

17、 “$log echo message 1 echo message 2 echo message 3 “$log函數(shù) 調(diào)用: 需要先定義后調(diào)用。名字參數(shù) 參數(shù): $1, $2 . $#, $ 返回值: 標(biāo)準(zhǔn)輸出 退出狀態(tài): return $num;或最后一個(gè)命令的退出狀態(tài) 注意 函數(shù)必須先定義,后使用函數(shù)# definefunc_name local可指定部分變量# exampleadd local sum sum = $1 + $2 echo $sumcnt=$ add 10 20 判斷OS# V1is_suseos if -f /etc/SuSE-release then return

18、0 else return 1 fi# V2is_suseos -f /etc/SuSE-release 最后一個(gè)命令的$?# 調(diào)用if is_suseos; thenecho “SUSE OSelseecho “Slackware ?fi關(guān)于函數(shù)的建議 函數(shù)名要具可讀性,從名字即能看出功能 函數(shù)盡量精練,只完成單一功能 盡量使用部分變量 local val 盡量在$?中返回失敗/成功 調(diào)用函數(shù)時(shí)要檢查成功與否 一般不需要編寫(xiě)main內(nèi)容導(dǎo)航 Bash根底 Bash語(yǔ)法 監(jiān)控實(shí)例監(jiān)控實(shí)例 進(jìn)程監(jiān)控 crontab調(diào)度 獨(dú)立運(yùn)行,周期性檢查 例: cron_mon.sh, 一個(gè)腳本的成長(zhǎng)過(guò)程關(guān)于腳本的建議 代碼應(yīng)分三部分:變量,函

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論