版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、主要內(nèi)容,Shell簡介 Shell基本語法 Shell腳本基本編程 Shell腳本高級部分,Shell簡介Shell概念,什么是Shell? Shell是一個命令解釋器,可以用來啟動、停止、編寫程序。它是操作系統(tǒng)最外面一層,負(fù)責(zé)管理用戶與操作系統(tǒng)之間的交互,例如等待用戶輸入,向操作系統(tǒng)解釋用戶的輸入,以及處理各種操作系統(tǒng)的輸出結(jié)果。,Shell簡介Shell概念,Shell是用戶和UNIX/Linux操作系統(tǒng)內(nèi)核程序間的一個接口。,Shell簡介Shell種類及歷史,Bourne shell(sh):Stephen Bourne,1979 Bourne Again Shell(bash) C
2、 shell (csh): Billjoy,70年代末期 Korn Shell(ksh): DavidKorn,80年代中期,Shell簡介Linux Shell,支持Bourne shell、C shell和Korn shell 標(biāo)準(zhǔn)shell為bash 向下兼容Bourne shell 工作控制(job control) 別名功能(alias) 命令歷史(command history) 命令列編輯功能 提供更豐富的變量類型、命令與控制結(jié)構(gòu),Shell簡介Shell作用,最主要的功用:解釋用戶在命令提示符下輸入的指令。 提供個性化的用戶環(huán)境。通常在shell的初始化文件中完成。(.bash
3、_profile、.bash_login、.bash_cshrc等)這些特性包括:設(shè)置變量、搜尋路徑、權(quán)限、提示符等。 解釋性的程序語言。Shell程序命令文件。由列在文件內(nèi)的命令所構(gòu)成:UNIX命令和基本的程序結(jié)構(gòu)。,Shell簡介Shell功能,命令行解釋功能 Shell試圖解釋命令行輸入的一行字符。其基本格式: command arguments 啟動程序 啟動命令行中要求的程序。實際是內(nèi)核執(zhí)行該程序。 輸入/輸出重定向 $ ls-l a.txt 管道連接 管道是輸入輸出重定向的特例,它將命令的輸出直接連到另一個命令的輸入。 $who|wc -l,Shell簡介Shell功能,文件名置換
4、 比如命令: $echo * 命令的執(zhí)行結(jié)果如下圖所示:,Shell簡介Shell功能,變量維護 定義變量,使用變量等。 環(huán)境控制 用戶個人環(huán)境的設(shè)置,包括用戶的home目錄、 用戶終端類型及PATH路徑等。,$LOOKUP=/usr/mydir $echo $LOOKUP /usr/mydir $echo LOOKUP LOOKUP,Shell簡介Shell功能,Shell簡介Shell功能,Shell編程 將Linux命令與各種流程控制和條件判斷來組合命令與變量賦值,就可以進行Shell編程。,Shell基本語法Shell腳本的執(zhí)行,Shell腳本的例子,#!/bin/bash LOG_D
5、IR=/var/log # 如果使用變量,當(dāng)然比把代碼寫死的好. cd $LOG_DIR cat /dev/null messages cat /dev/null wtmp echo Logs cleaned up. exit #,指明該腳本執(zhí)行需要的命令解釋器,定義變量,執(zhí)行UNIX內(nèi)部命令,退出Shell程序,Shell基本語法Shell腳本的執(zhí)行,#!/bin/bash 在 Linux 系統(tǒng)中默認(rèn)是 Bash #! 后邊給出的路徑名必須是正確的,否則將會出現(xiàn)一個錯誤消息,通常是 “Command not found”。 #!“也可以被忽略,不過這樣腳本無法使用 shell 內(nèi)建 的指令。
6、 如果在腳本 #!行,那么 bash 將把它認(rèn)為是一個一般 的注釋行.,Shell基本語法Shell腳本的執(zhí)行,Shell腳本的執(zhí)行 sh scriptname bash scriptname. 不推薦使用 sh scriptname,因為這禁用了腳本 stdin 中讀數(shù)據(jù)的功能. 更方便的方法是讓腳本通過 chmod命令可以修改,然后./scriptname測試它.,chmod 555 scriptname (允許任何人都具有可讀和執(zhí)行權(quán)限) chmod +rx scriptname (允許任何人都具有可讀和執(zhí)行權(quán)限) chmod u+rx scriptname (只給腳本可讀和執(zhí)行權(quán)限),
7、Shell基本語法Shell腳本的執(zhí)行,為什么不直接使用 scriptname 來調(diào)用腳本? 如果你當(dāng)前的目錄下($PWD)正好有你想要執(zhí)行的腳本,為什么它運行不了呢?失敗的原因是,出于安全考慮,當(dāng)前目錄并沒有被加在用戶的$PATH 變量中.因此,在當(dāng)前目錄下調(diào)用腳本 ./scriptname 這種形式.,Shell腳本的退出及退出狀態(tài),exit 命令被用來結(jié)束腳本。 exit n .當(dāng)n為0時表示執(zhí)行成功,非0通常表示一個錯誤碼。 腳本中將錯誤碼n傳遞給BASH。 腳本中若無exit語句,則其返回狀態(tài)由最后一條語句執(zhí)行的狀態(tài)決定。 $?讀取最后執(zhí)行命令的退出碼 特定的退出碼都有預(yù)定的含義,用
8、戶不應(yīng)該在自己的腳本中使用它 .,Shell腳本的退出及退出狀態(tài),1 #!/bin/bash 2 3 echo hello 4 echo $? # 返回0,因為執(zhí)行成功 5 6 lskdf # 不認(rèn)識的命令. 7 echo $? # 返回非0 值,因為失敗了. 8 9 echo 10 11 exit 113 # 將返回113 給 shell. 12 # To verify this, type echo $? after script terminates. 12 # 為了驗證這個,在腳本 echo $?,Shell基本語法特殊字符,# 字符 注釋,行首以#開頭為注釋(#!是個例外) 注釋也可
9、以存在于本行命令的后邊 .,# This line is a comment. $echo #aabbb $,echo 命令中被轉(zhuǎn)義的#是不能作為注釋的. 同樣的,#也可以出現(xiàn)在特定的參數(shù)替換結(jié) 構(gòu)中或者是數(shù)字常量表達式中,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 # 這里開始一個注釋 echo $PATH#*: # 參數(shù)替換,不是一個注釋 echo $( 2#1010
10、11 ) # 數(shù)制轉(zhuǎn)換,不是一個注釋,Shell基本語法特殊字符,; 命令分隔符,可以用來在一行中來寫多個命令。,$echo hello; echo there hello there,; 終止case選項,Shell基本語法特殊字符,. 命令等價于 source命令。 source filename args命令 .字符匹配, 正則表達式的一部分,用來匹配任何的單個字符. “ 雙引號 括起來的字符除$、和雙引號之外都將作為普通字符對待。 單引號括起來的字符均作為普通字符出現(xiàn)。 , 逗號鏈接了一系列的算術(shù)操作,雖然里邊所有的內(nèi)容都被運行了,但只有最后一項被返回.,$string=$PATH $
11、echo string $PATH,$string=“$PATH” $echo string $/usr/bin:/home/sxlyq,Shell基本語法特殊字符, 轉(zhuǎn)義字符,如X 等價于X或X 后置引用,命令替換。其對應(yīng)于鍵盤左上角的符號。其所括字符串在被Shell解釋時,首先執(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 顯示為雙引號 echo 顯示為,Shell基本語法特殊字符,反引號的功能是命令替換,將反引號中的字符串做為命令來執(zhí)行,shell編程時經(jīng)常用它將系統(tǒng)命令的執(zhí)行結(jié)果賦給一個變量 A=date echo $A 顯示的不是date而是當(dāng)時的時間串 如有一文件A的內(nèi)容如下 ABCDEFG 1234456 abcdefg B=cat A|grep 234 # 檢索文件A中含有字符串234的行 echo $B 將顯示為1234456,Shell基本語法特殊字符,: 空命令,等價于“NOP”(no op,一個
13、什么也不干的命令),與shell 的內(nèi)建命令(true)作用相同。“:”命令是一個 bash 的內(nèi)建命令,它的返回值為 0,就是 shell 返回的 true. * 萬能匹配字符,用于文件名匹配或者是正則表達式中。 *代表任何字符串。但文件名前的.和路徑名中的/必須顯示匹配。比如*不能匹配.file而”.*” 才能匹配。 ?代表單個字符。 代表指定的一個字符的范圍。 abc a, b, c三者中之一 a-n 從a到n的任一字符,$ echo * abs-book.sgml add-drive.sh agram.sh alias.sh,Shell基本語法特殊字符,判斷下面使用了通配符的字符串能否
14、匹配“reportfile” * ? r*f* r?f? *report*file ?eportfil? *report*file ?eport*? opqr*eport*,Shell基本語法特殊字符, 代碼塊.又被稱為內(nèi)部組.事實上,這個結(jié)構(gòu)創(chuàng)建了一個匿名的函數(shù). 但是與函數(shù)不同的是,在其中聲明的變量,對于腳本其他部分的代碼是可見的。如:,a=123 a=321; echo a = $a # a = 321 (說明在代碼塊中對變量 a 所作的修改,影響了外邊的變量 a),Shell基本語法特殊字符, echo x;echo y $X=$Y Y=y;echo x;echo y,Shell基本語
15、法內(nèi)部變量,內(nèi)部變量也是在Shell執(zhí)行前就定義的變量,但其只能被使用而無法被修改或重定義。 $# 位置參數(shù)的數(shù)量 $* 所有位置參數(shù)的內(nèi)容 $?命令執(zhí)行后返回的狀態(tài) $當(dāng)前進程的進程號最常見的用途是作為暫存文件的名稱,以保證不會重復(fù)。 $! 后臺運行的最后一個進程號 $0 當(dāng)前執(zhí)行的進程名,Shell基本語法位置參數(shù)變量,由shell在程序運行時設(shè)置。是在命令行中按照各自的位置決定的變量,程序名之后輸入的參數(shù),之間用空格分割,第一個參數(shù)可使用$1取得,以此類推,$0表示當(dāng)前Shell程序的進程名。 共10個位置參數(shù)變量,從程序名開始依次為第09個 Shift命令遞歸訪問參數(shù),Shell基本語
16、法位置參數(shù)變量,shift shift 命令重新分配位置參數(shù),其實就是向左移動一個位置. $1 - $2, $2 - $3, $3 - $4, 等等. 老的$1 將消失,但是$0(腳本名)是不會改變的.如果你使用了大量的位置參數(shù),那么 shift 命令允許你存取超過 10 個參數(shù).雖然表示法也允許這樣.,Shell基本語法參數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年寧波東方人力資源服務(wù)有限公司招聘外包工作人員備考題庫及答案詳解一套
- 2026年吉安市吉州區(qū)衛(wèi)生健康委員會面向社會公開招聘編外工作人員36人的備考題庫完整答案詳解
- 2026年中海物業(yè)管理有限公司招聘備考題庫含答案詳解
- 2026年云南富寧縣緊密型醫(yī)共體歸朝分院招聘編外工作人員的備考題庫及完整答案詳解一套
- 2026年中鐵現(xiàn)代物流科技股份有限公司太原分公司招聘備考題庫及參考答案詳解
- 2026年中鋁數(shù)為(成都)科技有限責(zé)任公司高校畢業(yè)生招聘備考題庫及1套完整答案詳解
- 2026年中冶南方(湖南)工程技術(shù)有限公司招聘備考題庫及參考答案詳解一套
- 小學(xué)差旅內(nèi)控制度
- 中公教育內(nèi)控制度
- 紀(jì)檢采購內(nèi)控制度匯編
- 多源醫(yī)療數(shù)據(jù)融合的聯(lián)邦學(xué)習(xí)策略研究
- 倉庫-拆除施工方案(3篇)
- 2025至2030中國工業(yè)邊緣控制器行業(yè)運營態(tài)勢與投資前景調(diào)查研究報告
- 磁電感應(yīng)式傳感器課件
- 防拐賣安全教育課件文庫
- 2026屆湖南省常德市石門一中生物高二第一學(xué)期期末統(tǒng)考試題含解析
- 美學(xué)概論論文
- 廣東省珠海市文園中學(xué)教育集團2025-2026學(xué)年九年級上學(xué)期期中語文試題(含答案及解析)
- 2025年6月浙江省高考?xì)v史試卷真題(含答案解析)
- 【MOOC】《國際商務(wù)》(暨南大學(xué))期末考試慕課答案
- 肺癌全程護理計劃
評論
0/150
提交評論