




已閱讀5頁,還剩75頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
.,shell編程,.,1認(rèn)識shell及shell腳本,shell命令解釋器,其主要功能是負(fù)責(zé)解釋和執(zhí)行命令行上鍵入的內(nèi)容。shell也提供了完善的編程能力。流行的shell有多種,如Bash、Tcsh、Ksh等。,.,1認(rèn)識shell及shell腳本,shell作用示意圖,.,1認(rèn)識shell及shell腳本,Shell類型/bin/sh(最早的shell程序,已經(jīng)被/bin/bash所取代);/bin/bash(通常情況下Linux系統(tǒng)默認(rèn)的shell);/bin/ksh(貝爾實驗室開發(fā),兼容于bash);/bin/zsh(基于ksh開發(fā),功能更加強大);/bin/csh(語法和C語言相似,更多的考慮了用戶界面的友好性);/bin/tcsh(csh的增強版,取代csh,提供更多的功能);,.,1認(rèn)識shell及shell腳本,Bash的重要功能命令和文件補全命令歷史記錄功能命令別名設(shè)置功能通配符功能作業(yè)控制、前后臺控制,.,1認(rèn)識shell及shell腳本,shellscript就像是早期批處理文件,最簡單的功能就是將多條指令匯整寫在一起,只需執(zhí)行一次就可以輕松處理復(fù)雜的動作rootserverroot#vie1.sh內(nèi)容如下:#!/bin/bashlsecho“Hello,world!”說明:shell腳本是按行解釋的,每個腳本的第一行總是以#!/bin/bash開頭在shell腳本中,以“#”開頭的行表示注釋shell將忽略對該行的處理,即不進行解釋、顯示和執(zhí)行,.,認(rèn)識shell及shell腳本,有兩種執(zhí)行shell腳本程序的方法。直接執(zhí)行1給腳本e1.sh增加執(zhí)行權(quán)rootserverroot#chmoda+xe1.sh2鍵入./el.sh直接執(zhí)行腳本rootserverroot#./e1.she1.shHello,world!鍵入sh腳本名rootserverroot#she1.shHello,world!,.,環(huán)境變量,環(huán)境變量在用戶登錄時,Linux系統(tǒng)會自動設(shè)置一些變量,這些變量的值決定了用戶的工作環(huán)境和外觀,因此稱為環(huán)境變量??捎谩癳nv”(environment)列出所有的環(huán)境變量及內(nèi)容,.,環(huán)境變量,常用環(huán)境變量HOSTNAME:代表主機名稱;SHELL:當(dāng)前環(huán)境下使用的shell程序,如果是bash的話,默認(rèn)是/bin/bash;HISTSIZE:記錄曾經(jīng)執(zhí)行過的歷史命令條數(shù);USER:用戶的名稱;ENV:用戶所用的個性化環(huán)境設(shè)置文件的讀取文件;HOME:代表用戶的家目錄,很多程序都可能會用到這個變量的值;MAIL:當(dāng)使用mail命令收信時,系統(tǒng)會去讀取的郵件信箱文件;PATH:執(zhí)行文件搜索的路徑。目錄之間以冒號(:)分割,順序很重要,決定查詢順序;PWD:當(dāng)前工作目錄;SHLVL環(huán)境變量:SHELL的層數(shù)。顯示環(huán)境變量#echo$變量名,.,環(huán)境變量,可寫的shell環(huán)境變量可以對它們進行賦值,大部分可寫的shell變量都在登錄過程執(zhí)行/etc/profile文件時初始化用戶也可以修改自己的啟動文件用戶目錄/.bash_profile來定制自己的運行環(huán)境環(huán)境變量一般是大寫的,系統(tǒng)啟動后自動加載,可寫的環(huán)境變量用戶也可以隨時進行修改#rootlocalhost#echo$PS1uhW$rootlocalhost#PS1=uh*rootlocalhost*,.,環(huán)境變量,設(shè)置環(huán)境變量用戶定義的普通變量通過導(dǎo)出也可以成為環(huán)境變量。環(huán)境變量就可以被其他的程序或下級子shell所訪問。設(shè)置的命令是export,其格式如下:export變量名rootserver#exportMYVAR=hellorootserver#echo$MYVARhello,.,本地用戶變量,本地變量一般地,shell變量不需要先定義,就可以直接為其賦值,即在賦值的同時完成變量的定義。為變量賦值的格式如下:變量名=變量值rootserverroot#a=1注意:在等號的左右兩邊不能出現(xiàn)空格。,.,本地用戶變量,當(dāng)賦值的內(nèi)容包含空格時,要使用“”將內(nèi)容括起來,否則只將空格前面的內(nèi)容賦值給該變量jackybogon$tom=”jackysfather”jackybogon$echo$tomjackysfather,.,本地用戶變量,雙引號中出現(xiàn)其它變量名時,在顯示內(nèi)容時會將該變量的內(nèi)容顯示出來,而單引號則只是原封不動的顯示字符,即一些特殊字符失去意義。例如jackybogon$name=jackyjackybogon$test1=$namesevenjackybogon$echo$test1$namesevenjackybogon$test2=”$nameseven”jackybogon$echo$test2jackyseven,.,本地用戶變量,反引號括起來的字符串被shell解釋為命令行jackybogon$mydate=”mytimeis:date”jackybogon$echo$mydatemytimeis:2012年3月15日星期四13:20:23CST可使用declare指令來聲明變量并設(shè)置變量的屬性rootlocalhost桌面#declarea=10rootlocalhost桌面#echo$a,.,本地用戶變量,使用變量值在變量名前加上前綴“$”符號,$variableecho$mydate大括號在不引起歧義的情況下也可以省略,以下例子表示使用變量時的不同情況jackybogon$name=jackyjackybogon$echo$nameseven注:帶有大括號相當(dāng)于拼合字符串jackysevenjackybogon$echo$nameseven注:$name和seven間無空格,表空串jackybogon$echo$nameseven注:$name和seven間有空格jackyseven,.,本地用戶變量,清除變量使用“unset”命令將其清除jackybogon$tom=”jackysfather”jackybogon$echo$tomjackysfatherjackybogon$unsettomjackybogon$echo$tom,.,特殊變量,特殊變量:位置變量和特定變量參數(shù)如果要向一個shell腳本傳遞信息,可以使用位置參數(shù)來完成。$0表示命令或shell腳本,無論腳本是否有參數(shù),此值均可用。$1-$9表示位置參數(shù)。如果參數(shù)個數(shù)多于9個,則多出的參數(shù)將會被忽略。jackybogon$autobak.sh/etc/home/jacky/usr/boot/opt/lib,.,特殊變量-位置參數(shù),請看以下位置參數(shù)示例:rootservermyshell#vie2.sh內(nèi)容如下:#!/bin/bashecho$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11rootservermyshell#./e2.shabcdefghijka,b,c,d,e,f,g,h,i,a0,a1,.,特殊變量-位置參數(shù),通過shift命令可以實現(xiàn)位置參數(shù)的左移,其格式如下:shift前移量位置參數(shù)移位示例:rootservermyshell#cate3.sh#!/bin/shshiftecho$1shift2echo$1rootservermyshell#./e3.shabcdbd,.,特殊變量,特定變量參數(shù)表示的相關(guān)控制信息。,.,打印特殊變量,rootservermyshell#vispecialvar.sh#!/bin/bashecho$#is:$#echo$*is:$*echo$?is:$?echo$is:$echo$0is:$0,.,元字符,元字符:具有特殊的含義與作用,無法像普通字符那樣使用它們,如果想把它們用作普通字符(比如說在echo語句中)就需要用一個反斜杠對它們進行轉(zhuǎn)換,當(dāng)然也可以使用單引號“”將元字符或者含有元字符的變量字符串括起來,同樣可以達到相同的目的。,.,變量操作,read命令:用來從鍵盤或文件的某一行文本中讀入信息,并將其賦給一個變量。一般形式:readvarible1varible2.jackybogon$readtestthisisatestjackybogon$echo$testthisisatestjackybogon$readtest1test2#輸入內(nèi)容第一個空格之后的內(nèi)容全部賦予最后一個變量thisisatestjackybogon$echo$test2isatest,.,變量操作,.,變量操作,expr:該命令一般用于整數(shù)值,也可用于字符串。格式:exprargumentoperatorargumentjackybogon$expr3+5#運算符兩側(cè)無空格原樣輸出3+5jackybogon$expr3+5#任何一側(cè)無空格均會被認(rèn)為是語法錯誤8jackybogon$var=8jackybogon$expr$var5#可以使用變量參與運算3jackybogon$expr$var*8#使用“”在“*”前避免認(rèn)為其是通配符64,.,學(xué)習(xí)ShellScript,shell腳本實質(zhì)上就是一個文本文件,內(nèi)容是多條命令和變量通過控制語句結(jié)合在一起來完成特定的功能,因此編輯shell腳本可以通過vim來實現(xiàn)。如使用腳本實現(xiàn)環(huán)境變量PATH的設(shè)置,在屏幕上顯示“Ourfirstshellscriptn”提示字符串#vie4.sh#!/bin/bash#firstshellprogramPATH=/bin:/sbin:/usr/sbin:/sur/local/bin:/usr/local/sbin:.exportPATHechoe“Ourfirstshellscriptn”exit0,.,學(xué)習(xí)ShellScript,通常編寫一個shell命令腳本程序需要經(jīng)過以下幾個基本步驟:1)打開vim等文本編輯器,準(zhǔn)備輸入腳本內(nèi)容;2)添加shell定義語句,使linux操作系統(tǒng)知道用戶使用哪一種shell語言;3)編寫shell命令腳本程序;4)保存命令腳本程序并退出;5)使用“chmodu+x”命令來修改這個腳本文件的權(quán)限使它可以執(zhí)行;6)終端提示符后輸入“./腳本名稱”(或使用“sh腳本名稱”)來執(zhí)行該腳本;7)如執(zhí)行錯誤進行必要調(diào)試,轉(zhuǎn)步驟4)執(zhí)行。,.,條件判斷式,shell中提供了test命令來實現(xiàn)上述的條件測試功能。在shell腳本中條件測試既可以用在分支結(jié)構(gòu)中,又可以用在循環(huán)結(jié)構(gòu)中。,.,條件判斷式,test命令(1)test命令有兩種使用格式:第一種是在test語句后加上測試條件;第二種是用方括號代替test。(2)test命令的格式如下:test測試條件或測試條件,.,條件判斷式-文件測試,文件測試條件示例:rootservermyshell#testfe2.shrootservermyshell#echo$?0功能:測試文件e2.sh是否為普通文件,測試結(jié)果為e2.sh是普通文件。rootservermyshell#-fe60.shrootservermyshell#echo$?1,.,條件判斷式-文件測試,要求:測試文件le2.sh是否為符號連接文件rootservermyshell#ln-se2.shle2.shrootservermyshell#-Lle2.shrootservermyshell#echo$?0要求:測試文件/dev/hda1是否是塊設(shè)備文件。rootservermyshell#-b/dev/hda1rootservermyshell#echo$?0,.,條件判斷式-字符串測試,string1=string2功能:字符串string1和字符串string2相等string1!=string2功能:字符串string1和字符串string2不相等-nstring1功能:字符串string1非空-zstring1功能:字符串string1為空,.,條件判斷式-字符串測試,字符串測試示例:rootserverroot#echo$LOGNAMErootrootserverroot#$LOGNAME=“root”rootserverroot#echo$?0,.,條件判斷式-數(shù)值測試,expr1eqexpr2功能:當(dāng)表達式expr1的值與表達式expr2的值相等expr1neexpr2功能:當(dāng)表達式expr1的值與表達式expr2的值不相等expr1gtexpr2功能:當(dāng)表達式expr1的值大于與表達式expr2的值expr1ltexpr2功能:當(dāng)表達式expr1的值小于與表達式expr2的值expr1geexpr2功能:當(dāng)表達式expr1的值大于等于表達式expr2的值expr1leexpr2功能:當(dāng)表達式expr1的值小于等于表達式expr2的值,.,條件判斷式-數(shù)值測試,rootserverroot#a=10rootserverroot#b=20rootserverroot#declare-icrootserverroot#c=$a+$brootserverroot#echo$c30,.,條件判斷式-數(shù)值測試,rootserverroot#$c-eq30rootserverroot#echo$?0rootserverroot#$c-eq30rootserverroot#echo$?0rootserverroot#$c-ne30rootserverroot#echo$?1rootserverroot#$c-ge35rootserverroot#echo$?1,.,條件判斷式-邏輯操作符,shell提供的邏輯操作符有三個:一是邏輯與、二是邏輯或、三是邏輯非。,.,條件判斷式-與或非,邏輯與操作符示例:rootserverroot#name=Tomrootserverroot#password=abcrootserverroot#$name=“Tom”a$password=“abc”rootserverroot#echo$?0功能:測試變量$name是否等于“Tom”并且$password是否等于“abc”。,.,條件判斷式-與或非,示例:rootserverroot#lsle3.sh-rw-r-r-1rootroot41Jan1412:16e3.shrootserverroot#-re3.sh-a-xe3.shrootserverroot#lecho$?1功能:測試文件e3.sh是否同時具有讀權(quán)限和可執(zhí)行權(quán)限。,.,條件判斷式-與或非,rootserverroot#name=Tomrootserverroot#password=abcrootserverroot#$name=“Tom”-o$password=“123456”rootserverroot#echo$?0,.,條件判斷式-與或非,邏輯非操作符示例:rootserverroot#lsle3.sh-rw-r-r-1rootroot41Jan1412:16e3.shrootserverroot#-xe3.shrootserverroot#echo$?1rootserverroot#!xe3.shrootserverroot#echo$?0需要注意的是,邏輯非“!”的兩邊也必須各有一個空格。,.,分支控制結(jié)構(gòu),在shell中有兩種形式的分支結(jié)構(gòu):一種是if分支結(jié)構(gòu),另一種case分支結(jié)構(gòu)。,.,分支控制結(jié)構(gòu),if分支結(jié)構(gòu)的基本格式如下:if條件測試1;then條件測試1為真時的語句序列elif條件測試2;then條件測試2為真時的語句序列.else條件測試為假時的語句序列fi,.,分支控制結(jié)構(gòu),if分支結(jié)構(gòu)示例一:用戶輸入字符串,判斷其內(nèi)容是否與存儲在變量$name中的內(nèi)容相同。rootserverroot#cate10.sh#!/bin/shname=garfieldecho-nPleaseinput:readuservalueif$uservalue=$name;thenechosameelseechodifferencefi,.,分支控制結(jié)構(gòu),執(zhí)行:rootserverroot#./e10.shPleaseinput:abcdifferencerootserverroot#./e10.shPleaseinput:garfieldsame,.,分支控制結(jié)構(gòu),if分支結(jié)構(gòu)示例二:判斷今天是不是星期一。rootserverroot#cate12.sh#!/bin/shtoday=date+%uif$today=1;thenechoTodayisMondayelseechoTodayisnotMondayfi,.,分支控制結(jié)構(gòu),執(zhí)行:rootserverroot#dateSunJan1417:12:25CST2007rootserverroot#./e12.shTodayisnotMonday,.,分支控制結(jié)構(gòu),if分支結(jié)構(gòu)示例三:判斷用戶指定文件的類型。rootserverroot#cate13.sh#!/bin/shusefile=$1if-d$usefile;thenechodirectoryelif-f$usefile;thenechonormalelif-b$usefile;thenechoblockdeviceelif-c$usefile;thenechochardeviceelseechootherfi,.,分支控制結(jié)構(gòu),執(zhí)行:rootserverroot#./e13.she13.shnormal,.,分支控制結(jié)構(gòu),case語句的結(jié)構(gòu)如下:case值in模式1)語句組1;模式2)語句組2;*)語句組nesac,.,分支控制結(jié)構(gòu),case分支結(jié)構(gòu)示例一:通過判斷$1的值,設(shè)置用戶指定文件的權(quán)限。rootserverroot#cate16.sh#!/bin/bashoption=$1filename=$2case$optioninr)chmodu+r$filename;w)chmodu+w$filename;x)chmodu+x$filename;*)echoerror!exit1;esacexit0,.,分支控制結(jié)構(gòu),rootserverroot#ls-labc-rw-r-r-1rootroot161Jan1321:36abcrootserverroot#./e16.shxabcrootserverroot#ls-labc-rwxr-r-1rootroot161Jan1321:36abc,.,分支控制結(jié)構(gòu),case分支結(jié)構(gòu)示例二:提示鍵入“y”或“n”,根據(jù)實際輸入執(zhí)行相應(yīng)分支。#!/bin/shecho-nPleaseinputyourchoicey|n:readchcase$chiny|Y|yes|YES)echogoon;n|N|no|NO)echocancel;*)echoerror,youshouldinputy|nexit1;esacexit0,.,分支控制結(jié)構(gòu),執(zhí)行:rootserverroot#./e17.shPleaseinputyourchoicey|n:ygoon,.,循環(huán)結(jié)構(gòu),1for循環(huán)其典型格式如下:for變量in值1值2值ndo語句1語句2done,.,循環(huán)結(jié)構(gòu),for循環(huán)示例一:顯示全部位置變量參數(shù)。rootserverroot#cate19.sh#!/bin/bashforiin$doecho$idonerootserverroot#./e19.shabcdeabcde說明:如果省略了in,則默認(rèn)從$*或$中取值。,.,循環(huán)結(jié)構(gòu),for循環(huán)示例二:顯示$PATH變量中各目錄的名稱。rootserverroot#cate20.sh#!/bin/bashIFS=:fordirin$PATHdols-ld$dirdoneechoFinished!,.,循環(huán)結(jié)構(gòu),執(zhí)行:rootserverroot#./e20.shdrwxr-xr-x2rootroot4096Feb71996/usr/local/bindrwxr-xr-x2rootroot4096Feb182003/bindrwxr-xr-x2rootroot36864Aug2422:00/usr/bindrwxr-xr-x2rootroot4096Feb182003/usr/X11R6/binFinished!,.,循環(huán)結(jié)構(gòu),for循環(huán)示例三:與C語言相似的格式用法。rootserverroot#cat./e21.sh#!/bin/bashfor(i=1;i=6;i+)dofor(j=1;j=i;j+)doecho-e*cdoneechodone,.,循環(huán)結(jié)構(gòu),rootserverroot#./e21.sh*,.,循環(huán)結(jié)構(gòu),while循環(huán)的格式如下:while條件do語句1語句2done,.,循環(huán)結(jié)構(gòu),while循環(huán)示例:逐行顯示一個文本文件的內(nèi)容,忽略以符號“#”開頭的行,并在所顯示的每一行前加上行號。rootserverroot#cate23.sh#!/bin/bashcounter=1whilereadlinedoif!$line:0:1=#;thenecho$counter:$linecounter=$counter+1fidone$1,.,循環(huán)結(jié)構(gòu),rootserverroot#./e23.she23.sh1:counter=12:whilereadline3:do4:if!$line:0:1=#;then5:echo$counter:$line6:counter=$counter+17:fi8:done$1,.,循環(huán)結(jié)構(gòu),until控制結(jié)構(gòu),形式:until循環(huán)條件do程序段done,.,循環(huán)結(jié)構(gòu),實現(xiàn)循環(huán)輸入結(jié)束的字母,直到符合條件時退出循環(huán)viuntil#!/bin/bashechopressy/Ytostop.readinputuntil$input=Y|$input=ydoechoerrorinput,pleasetryagain.readinputdoneechostophere,.,循環(huán)結(jié)構(gòu),break和continuebreak命令允許跳出循環(huán),通常在進行一些處理后退出循環(huán)或case語句continue的作用是跳出本次循環(huán),進行下次循環(huán),一個不帶參數(shù)的continue命令只去掉本次循環(huán)的剩余代碼,而continueN將會把N層循環(huán)剩余的代碼都去掉,但是循環(huán)的次數(shù)不變,.,循環(huán)結(jié)構(gòu),#!/bin/bashforiin“x”“y”“z”doecho$iforjinseq8#seq命令用來打印一個序列,后跟數(shù)字時從1開始doif$j-eq4;thenbreakfiecho“$j”donedone,.,shell函數(shù),函數(shù)的定義在shell中定義函數(shù)有兩種格式:functionfuncnameshellcommands或funcname()shellcommands,.,shell函數(shù),定義函數(shù)示例:定義一個shell函數(shù)。rootserverroot#cate29.sh#!/bin/bashmyfunction()echoHello,world!,.,shell函數(shù),調(diào)用shell函數(shù)示例:利用select循環(huán)、case語句
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 給媽媽出數(shù)學(xué)試卷
- 2025年4月新疆醫(yī)科大學(xué)第六附屬醫(yī)院高層次人才引進12人筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025年吉林松原市長嶺縣衛(wèi)健系統(tǒng)事業(yè)單位專項招聘大學(xué)生鄉(xiāng)村醫(yī)生2人筆試歷年專業(yè)考點(難、易錯點)附帶答案詳解
- 2025至2030代理記賬行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 2025至2030創(chuàng)傷外科用藥行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 愛心籌款 傳遞希望主題班會課件
- 關(guān)于小學(xué)升初中數(shù)學(xué)試卷
- 肥城三模數(shù)學(xué)試卷
- 化纖漿粕的復(fù)合材料應(yīng)用研究考核試卷
- 網(wǎng)球場圍網(wǎng)材質(zhì)防蟲害性能研究考核試卷
- 工業(yè)機器人講課件
- 2025年湖北省中考英語試卷真題(含答案解析)
- 篩網(wǎng)維護使用管理制度
- ??谱o士基地管理制度
- 2025年1月遼寧省普通高中學(xué)業(yè)水平合格性考試英語試題(原卷版)
- 二年級下二升三數(shù)學(xué)暑假作業(yè)(人教)
- 期末達標(biāo)測試卷(含答案)2024-2025學(xué)年人教版七年級數(shù)學(xué)下冊
- 2025年廣安市中考語文試卷真題(含標(biāo)準(zhǔn)答案)
- 云南省昆明市2023-2024學(xué)年高二下學(xué)期期末質(zhì)量檢測數(shù)學(xué)試題(解析版)
- 2025【合同范本】產(chǎn)品銷售代理合同范本
- 2025年蘇教版四年級(下)期末考試數(shù)學(xué)試卷(含答案)
評論
0/150
提交評論