第三講 Shell編程1.ppt_第1頁(yè)
第三講 Shell編程1.ppt_第2頁(yè)
第三講 Shell編程1.ppt_第3頁(yè)
第三講 Shell編程1.ppt_第4頁(yè)
第三講 Shell編程1.ppt_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、主要內(nèi)容,Shell簡(jiǎn)介 Shell基本語(yǔ)法 Shell腳本基本編程 Shell腳本高級(jí)部分,Shell簡(jiǎn)介Shell概念,什么是Shell? Shell是一個(gè)命令解釋器,可以用來(lái)啟動(dòng)、停止、編寫(xiě)程序。它是操作系統(tǒng)最外面一層,負(fù)責(zé)管理用戶(hù)與操作系統(tǒng)之間的交互,例如等待用戶(hù)輸入,向操作系統(tǒng)解釋用戶(hù)的輸入,以及處理各種操作系統(tǒng)的輸出結(jié)果。,Shell簡(jiǎn)介Shell概念,Shell是用戶(hù)和UNIX/Linux操作系統(tǒng)內(nèi)核程序間的一個(gè)接口。,Shell簡(jiǎn)介Shell種類(lèi)及歷史,Bourne shell(sh):Stephen Bourne,1979 Bourne Again Shell(bash) C

2、 shell (csh): Billjoy,70年代末期 Korn Shell(ksh): DavidKorn,80年代中期,Shell簡(jiǎn)介L(zhǎng)inux Shell,支持Bourne shell、C shell和Korn shell 標(biāo)準(zhǔn)shell為bash 向下兼容Bourne shell 工作控制(job control) 別名功能(alias) 命令歷史(command history) 命令列編輯功能 提供更豐富的變量類(lèi)型、命令與控制結(jié)構(gòu),Shell簡(jiǎn)介Shell作用,最主要的功用:解釋用戶(hù)在命令提示符下輸入的指令。 提供個(gè)性化的用戶(hù)環(huán)境。通常在shell的初始化文件中完成。(.bash

3、_profile、.bash_login、.bash_cshrc等)這些特性包括:設(shè)置變量、搜尋路徑、權(quán)限、提示符等。 解釋性的程序語(yǔ)言。Shell程序命令文件。由列在文件內(nèi)的命令所構(gòu)成:UNIX命令和基本的程序結(jié)構(gòu)。,Shell簡(jiǎn)介Shell功能,命令行解釋功能 Shell試圖解釋命令行輸入的一行字符。其基本格式: command arguments 啟動(dòng)程序 啟動(dòng)命令行中要求的程序。實(shí)際是內(nèi)核執(zhí)行該程序。 輸入/輸出重定向 $ ls-l a.txt 管道連接 管道是輸入輸出重定向的特例,它將命令的輸出直接連到另一個(gè)命令的輸入。 $who|wc -l,Shell簡(jiǎn)介Shell功能,文件名置換

4、 比如命令: $echo * 命令的執(zhí)行結(jié)果如下圖所示:,Shell簡(jiǎn)介Shell功能,變量維護(hù) 定義變量,使用變量等。 環(huán)境控制 用戶(hù)個(gè)人環(huán)境的設(shè)置,包括用戶(hù)的home目錄、 用戶(hù)終端類(lèi)型及PATH路徑等。,$LOOKUP=/usr/mydir $echo $LOOKUP /usr/mydir $echo LOOKUP LOOKUP,Shell簡(jiǎn)介Shell功能,Shell簡(jiǎn)介Shell功能,Shell編程 將Linux命令與各種流程控制和條件判斷來(lái)組合命令與變量賦值,就可以進(jìn)行Shell編程。,Shell基本語(yǔ)法Shell腳本的執(zhí)行,Shell腳本的例子,#!/bin/bash LOG_D

5、IR=/var/log # 如果使用變量,當(dāng)然比把代碼寫(xiě)死的好. cd $LOG_DIR cat /dev/null messages cat /dev/null wtmp echo Logs cleaned up. exit #,指明該腳本執(zhí)行需要的命令解釋器,定義變量,執(zhí)行UNIX內(nèi)部命令,退出Shell程序,Shell基本語(yǔ)法Shell腳本的執(zhí)行,#!/bin/bash 在 Linux 系統(tǒng)中默認(rèn)是 Bash #! 后邊給出的路徑名必須是正確的,否則將會(huì)出現(xiàn)一個(gè)錯(cuò)誤消息,通常是 “Command not found”。 #!“也可以被忽略,不過(guò)這樣腳本無(wú)法使用 shell 內(nèi)建 的指令。

6、 如果在腳本 #!行,那么 bash 將把它認(rèn)為是一個(gè)一般 的注釋行.,Shell基本語(yǔ)法Shell腳本的執(zhí)行,Shell腳本的執(zhí)行 sh scriptname bash scriptname. 不推薦使用 sh scriptname,因?yàn)檫@禁用了腳本 stdin 中讀數(shù)據(jù)的功能. 更方便的方法是讓腳本通過(guò) chmod命令可以修改,然后./scriptname測(cè)試它.,chmod 555 scriptname (允許任何人都具有可讀和執(zhí)行權(quán)限) chmod +rx scriptname (允許任何人都具有可讀和執(zhí)行權(quán)限) chmod u+rx scriptname (只給腳本可讀和執(zhí)行權(quán)限),

7、Shell基本語(yǔ)法Shell腳本的執(zhí)行,為什么不直接使用 scriptname 來(lái)調(diào)用腳本? 如果你當(dāng)前的目錄下($PWD)正好有你想要執(zhí)行的腳本,為什么它運(yùn)行不了呢?失敗的原因是,出于安全考慮,當(dāng)前目錄并沒(méi)有被加在用戶(hù)的$PATH 變量中.因此,在當(dāng)前目錄下調(diào)用腳本 ./scriptname 這種形式.,Shell腳本的退出及退出狀態(tài),exit 命令被用來(lái)結(jié)束腳本。 exit n .當(dāng)n為0時(shí)表示執(zhí)行成功,非0通常表示一個(gè)錯(cuò)誤碼。 腳本中將錯(cuò)誤碼n傳遞給BASH。 腳本中若無(wú)exit語(yǔ)句,則其返回狀態(tài)由最后一條語(yǔ)句執(zhí)行的狀態(tài)決定。 $?讀取最后執(zhí)行命令的退出碼 特定的退出碼都有預(yù)定的含義,用

8、戶(hù)不應(yīng)該在自己的腳本中使用它 .,Shell腳本的退出及退出狀態(tài),1 #!/bin/bash 2 3 echo hello 4 echo $? # 返回0,因?yàn)閳?zhí)行成功 5 6 lskdf # 不認(rèn)識(shí)的命令. 7 echo $? # 返回非0 值,因?yàn)槭×? 8 9 echo 10 11 exit 113 # 將返回113 給 shell. 12 # To verify this, type echo $? after script terminates. 12 # 為了驗(yàn)證這個(gè),在腳本 echo $?,Shell基本語(yǔ)法特殊字符,# 字符 注釋,行首以#開(kāi)頭為注釋(#!是個(gè)例外) 注釋也可

9、以存在于本行命令的后邊 .,# This line is a comment. $echo #aabbb $,echo 命令中被轉(zhuǎn)義的#是不能作為注釋的. 同樣的,#也可以出現(xiàn)在特定的參數(shù)替換結(jié) 構(gòu)中或者是數(shù)字常量表達(dá)式中,echo The # here does not begin a comment. echo The # here does not begin a comment. echo The # here does not begin a comment. echo The # 這里開(kāi)始一個(gè)注釋 echo $PATH#*: # 參數(shù)替換,不是一個(gè)注釋 echo $( 2#1010

10、11 ) # 數(shù)制轉(zhuǎn)換,不是一個(gè)注釋,Shell基本語(yǔ)法特殊字符,; 命令分隔符,可以用來(lái)在一行中來(lái)寫(xiě)多個(gè)命令。,$echo hello; echo there hello there,; 終止case選項(xiàng),Shell基本語(yǔ)法特殊字符,. 命令等價(jià)于 source命令。 source filename args命令 .字符匹配, 正則表達(dá)式的一部分,用來(lái)匹配任何的單個(gè)字符. “ 雙引號(hào) 括起來(lái)的字符除$、和雙引號(hào)之外都將作為普通字符對(duì)待。 單引號(hào)括起來(lái)的字符均作為普通字符出現(xiàn)。 , 逗號(hào)鏈接了一系列的算術(shù)操作,雖然里邊所有的內(nèi)容都被運(yùn)行了,但只有最后一項(xiàng)被返回.,$string=$PATH $

11、echo string $PATH,$string=“$PATH” $echo string $/usr/bin:/home/sxlyq,Shell基本語(yǔ)法特殊字符, 轉(zhuǎn)義字符,如X 等價(jià)于X或X 后置引用,命令替換。其對(duì)應(yīng)于鍵盤(pán)左上角的符號(hào)。其所括字符串在被Shell解釋時(shí),首先執(zhí)行其中的命令并將其結(jié)果代替該命令。,$let t2 = (a = 9, 15 / 3) $echo $t2;echo $a $5 $9,$pwd /home/sxlyq $string=“current directory is pwd” $echo $string Current directory is /ho

12、me/sxlyq,echo $A 顯示為$A 如果不加將顯示為1234 echo 顯示為 echo 顯示為雙引號(hào) echo 顯示為,Shell基本語(yǔ)法特殊字符,反引號(hào)的功能是命令替換,將反引號(hào)中的字符串做為命令來(lái)執(zhí)行,shell編程時(shí)經(jīng)常用它將系統(tǒng)命令的執(zhí)行結(jié)果賦給一個(gè)變量 A=date echo $A 顯示的不是date而是當(dāng)時(shí)的時(shí)間串 如有一文件A的內(nèi)容如下 ABCDEFG 1234456 abcdefg B=cat A|grep 234 # 檢索文件A中含有字符串234的行 echo $B 將顯示為1234456,Shell基本語(yǔ)法特殊字符,: 空命令,等價(jià)于“NOP”(no op,一個(gè)

13、什么也不干的命令),與shell 的內(nèi)建命令(true)作用相同?!?”命令是一個(gè) bash 的內(nèi)建命令,它的返回值為 0,就是 shell 返回的 true. * 萬(wàn)能匹配字符,用于文件名匹配或者是正則表達(dá)式中。 *代表任何字符串。但文件名前的.和路徑名中的/必須顯示匹配。比如*不能匹配.file而”.*” 才能匹配。 ?代表單個(gè)字符。 代表指定的一個(gè)字符的范圍。 abc a, b, c三者中之一 a-n 從a到n的任一字符,$ echo * abs-book.sgml add-drive.sh agram.sh alias.sh,Shell基本語(yǔ)法特殊字符,判斷下面使用了通配符的字符串能否

14、匹配“reportfile” * ? r*f* r?f? *report*file ?eportfil? *report*file ?eport*? opqr*eport*,Shell基本語(yǔ)法特殊字符, 代碼塊.又被稱(chēng)為內(nèi)部組.事實(shí)上,這個(gè)結(jié)構(gòu)創(chuàng)建了一個(gè)匿名的函數(shù). 但是與函數(shù)不同的是,在其中聲明的變量,對(duì)于腳本其他部分的代碼是可見(jiàn)的。如:,a=123 a=321; echo a = $a # a = 321 (說(shuō)明在代碼塊中對(duì)變量 a 所作的修改,影響了外邊的變量 a),Shell基本語(yǔ)法特殊字符, echo x;echo y $X=$Y Y=y;echo x;echo y,Shell基本語(yǔ)

15、法內(nèi)部變量,內(nèi)部變量也是在Shell執(zhí)行前就定義的變量,但其只能被使用而無(wú)法被修改或重定義。 $# 位置參數(shù)的數(shù)量 $* 所有位置參數(shù)的內(nèi)容 $?命令執(zhí)行后返回的狀態(tài) $當(dāng)前進(jìn)程的進(jìn)程號(hào)最常見(jiàn)的用途是作為暫存文件的名稱(chēng),以保證不會(huì)重復(fù)。 $! 后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程號(hào) $0 當(dāng)前執(zhí)行的進(jìn)程名,Shell基本語(yǔ)法位置參數(shù)變量,由shell在程序運(yùn)行時(shí)設(shè)置。是在命令行中按照各自的位置決定的變量,程序名之后輸入的參數(shù),之間用空格分割,第一個(gè)參數(shù)可使用$1取得,以此類(lèi)推,$0表示當(dāng)前Shell程序的進(jìn)程名。 共10個(gè)位置參數(shù)變量,從程序名開(kāi)始依次為第09個(gè) Shift命令遞歸訪問(wèn)參數(shù),Shell基本語(yǔ)

16、法位置參數(shù)變量,shift shift 命令重新分配位置參數(shù),其實(shí)就是向左移動(dòng)一個(gè)位置. $1 - $2, $2 - $3, $3 - $4, 等等. 老的$1 將消失,但是$0(腳本名)是不會(huì)改變的.如果你使用了大量的位置參數(shù),那么 shift 命令允許你存取超過(guò) 10 個(gè)參數(shù).雖然表示法也允許這樣.,Shell基本語(yǔ)法參數(shù)置換變量,根據(jù)不同條件給變量賦予不同的值。 變量=$參數(shù)-word,$parameter:-default如果設(shè)置了參數(shù),則用參數(shù)的值置換變量的值,否則用word置換。這兩者大部分情況下相同。 變量=$參數(shù)=word,$parameter:=default如果設(shè)置了參數(shù),則用參數(shù)的值置換變量的值,否則把變量設(shè)置成word,然后再用word替換參數(shù)的值。 變量=$參數(shù)?Word如果設(shè)置了參數(shù),則用參數(shù)的值置換變量的值,否則就顯示word并從shell中退

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論