




已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(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(貝爾實(shí)驗(yàn)室開發(fā),兼容于bash);/bin/zsh(基于ksh開發(fā),功能更加強(qiáng)大);/bin/csh(語法和C語言相似,更多的考慮了用戶界面的友好性);/bin/tcsh(csh的增強(qiáng)版,取代csh,提供更多的功能);,.,1認(rèn)識shell及shell腳本,Bash的重要功能命令和文件補(bǔ)全命令歷史記錄功能命令別名設(shè)置功能通配符功能作業(yè)控制、前后臺控制,.,1認(rèn)識shell及shell腳本,shellscript就像是早期批處理文件,最簡單的功能就是將多條指令匯整寫在一起,只需執(zhí)行一次就可以輕松處理復(fù)雜的動作rootserverroot#vie1.sh內(nèi)容如下:#!/bin/bashlsecho“Hello,world!”說明:shell腳本是按行解釋的,每個(gè)腳本的第一行總是以#!/bin/bash開頭在shell腳本中,以“#”開頭的行表示注釋shell將忽略對該行的處理,即不進(jìn)行解釋、顯示和執(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)境變量在用戶登錄時(shí),Linux系統(tǒng)會自動設(shè)置一些變量,這些變量的值決定了用戶的工作環(huán)境和外觀,因此稱為環(huán)境變量??捎谩癳nv”(environment)列出所有的環(huán)境變量及內(nèi)容,.,環(huán)境變量,常用環(huán)境變量HOSTNAME:代表主機(jī)名稱;SHELL:當(dāng)前環(huán)境下使用的shell程序,如果是bash的話,默認(rèn)是/bin/bash;HISTSIZE:記錄曾經(jīng)執(zhí)行過的歷史命令條數(shù);USER:用戶的名稱;ENV:用戶所用的個(gè)性化環(huán)境設(shè)置文件的讀取文件;HOME:代表用戶的家目錄,很多程序都可能會用到這個(gè)變量的值;MAIL:當(dāng)使用mail命令收信時(shí),系統(tǒng)會去讀取的郵件信箱文件;PATH:執(zhí)行文件搜索的路徑。目錄之間以冒號(:)分割,順序很重要,決定查詢順序;PWD:當(dāng)前工作目錄;SHLVL環(huán)境變量:SHELL的層數(shù)。顯示環(huán)境變量#echo$變量名,.,環(huán)境變量,可寫的shell環(huán)境變量可以對它們進(jìn)行賦值,大部分可寫的shell變量都在登錄過程執(zhí)行/etc/profile文件時(shí)初始化用戶也可以修改自己的啟動文件用戶目錄/.bash_profile來定制自己的運(yùn)行環(huán)境環(huán)境變量一般是大寫的,系統(tǒng)啟動后自動加載,可寫的環(huán)境變量用戶也可以隨時(shí)進(jì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變量不需要先定義,就可以直接為其賦值,即在賦值的同時(shí)完成變量的定義。為變量賦值的格式如下:變量名=變量值rootserverroot#a=1注意:在等號的左右兩邊不能出現(xiàn)空格。,.,本地用戶變量,當(dāng)賦值的內(nèi)容包含空格時(shí),要使用“”將內(nèi)容括起來,否則只將空格前面的內(nèi)容賦值給該變量jackybogon$tom=”jackysfather”jackybogon$echo$tomjackysfather,.,本地用戶變量,雙引號中出現(xiàn)其它變量名時(shí),在顯示內(nèi)容時(shí)會將該變量的內(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大括號在不引起歧義的情況下也可以省略,以下例子表示使用變量時(shí)的不同情況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ù)如果要向一個(gè)shell腳本傳遞信息,可以使用位置參數(shù)來完成。$0表示命令或shell腳本,無論腳本是否有參數(shù),此值均可用。$1-$9表示位置參數(shù)。如果參數(shù)個(gè)數(shù)多于9個(gè),則多出的參數(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命令可以實(shí)現(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語句中)就需要用一個(gè)反斜杠對它們進(jìn)行轉(zhuǎn)換,當(dāng)然也可以使用單引號“”將元字符或者含有元字符的變量字符串括起來,同樣可以達(dá)到相同的目的。,.,變量操作,read命令:用來從鍵盤或文件的某一行文本中讀入信息,并將其賦給一個(gè)變量。一般形式:readvarible1varible2.jackybogon$readtestthisisatestjackybogon$echo$testthisisatestjackybogon$readtest1test2#輸入內(nèi)容第一個(gè)空格之后的內(nèi)容全部賦予最后一個(gè)變量thisisatestjackybogon$echo$test2isatest,.,變量操作,.,變量操作,expr:該命令一般用于整數(shù)值,也可用于字符串。格式:exprargumentoperatorargumentjackybogon$expr3+5#運(yùn)算符兩側(cè)無空格原樣輸出3+5jackybogon$expr3+5#任何一側(cè)無空格均會被認(rèn)為是語法錯誤8jackybogon$var=8jackybogon$expr$var5#可以使用變量參與運(yùn)算3jackybogon$expr$var*8#使用“”在“*”前避免認(rèn)為其是通配符64,.,學(xué)習(xí)ShellScript,shell腳本實(shí)質(zhì)上就是一個(gè)文本文件,內(nèi)容是多條命令和變量通過控制語句結(jié)合在一起來完成特定的功能,因此編輯shell腳本可以通過vim來實(shí)現(xiàn)。如使用腳本實(shí)現(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,通常編寫一個(gè)shell命令腳本程序需要經(jīng)過以下幾個(gè)基本步驟:1)打開vim等文本編輯器,準(zhǔn)備輸入腳本內(nèi)容;2)添加shell定義語句,使linux操作系統(tǒng)知道用戶使用哪一種shell語言;3)編寫shell命令腳本程序;4)保存命令腳本程序并退出;5)使用“chmodu+x”命令來修改這個(gè)腳本文件的權(quán)限使它可以執(zhí)行;6)終端提示符后輸入“./腳本名稱”(或使用“sh腳本名稱”)來執(zhí)行該腳本;7)如執(zhí)行錯誤進(jìn)行必要調(diào)試,轉(zhuǎn)步驟4)執(zhí)行。,.,條件判斷式,shell中提供了test命令來實(shí)現(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)表達(dá)式expr1的值與表達(dá)式expr2的值相等expr1neexpr2功能:當(dāng)表達(dá)式expr1的值與表達(dá)式expr2的值不相等expr1gtexpr2功能:當(dāng)表達(dá)式expr1的值大于與表達(dá)式expr2的值expr1ltexpr2功能:當(dāng)表達(dá)式expr1的值小于與表達(dá)式expr2的值expr1geexpr2功能:當(dāng)表達(dá)式expr1的值大于等于表達(dá)式expr2的值expr1leexpr2功能:當(dāng)表達(dá)式expr1的值小于等于表達(dá)式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提供的邏輯操作符有三個(gè):一是邏輯與、二是邏輯或、三是邏輯非。,.,條件判斷式-與或非,邏輯與操作符示例: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是否同時(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需要注意的是,邏輯非“!”的兩邊也必須各有一個(gè)空格。,.,分支控制結(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為真時(shí)的語句序列elif條件測試2;then條件測試2為真時(shí)的語句序列.else條件測試為假時(shí)的語句序列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ù)實(shí)際輸入執(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)示例:逐行顯示一個(gè)文本文件的內(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),實(shí)現(xiàn)循環(huán)輸入結(jié)束的字母,直到符合條件時(shí)退出循環(huán)viuntil#!/bin/bashechopressy/Ytostop.readinputuntil$input=Y|$input=ydoechoerrorinput,pleasetryagain.readinputdoneechostophere,.,循環(huán)結(jié)構(gòu),break和continuebreak命令允許跳出循環(huán),通常在進(jìn)行一些處理后退出循環(huán)或case語句continue的作用是跳出本次循環(huán),進(jìn)行下次循環(huán),一個(gè)不帶參數(shù)的continue命令只去掉本次循環(huán)的剩余代碼,而continueN將會把N層循環(huán)剩余的代碼都去掉,但是循環(huán)的次數(shù)不變,.,循環(huán)結(jié)構(gòu),#!/bin/bashforiin“x”“y”“z”doecho$iforjinseq8#seq命令用來打印一個(gè)序列,后跟數(shù)字時(shí)從1開始doif$j-eq4;thenbreakfiecho“$j”donedone,.,shell函數(shù),函數(shù)的定義在shell中定義函數(shù)有兩種格式:functionfuncnameshellcommands或funcname()shellcommands,.,shell函數(shù),定義函數(shù)示例:定義一個(gè)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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升匯報(bào)工作的技巧與要點(diǎn)
- 2025年中國聯(lián)合收割機(jī)行業(yè)市場深度分析及投資策略研究報(bào)告
- 2025年中國轉(zhuǎn)移因子行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報(bào)告
- 移動貨架系統(tǒng)中巷道均衡對物流自動化的推動
- 遺址保護(hù)與管理策略-洞察闡釋
- 幼兒動手能力的培養(yǎng)與游戲化教學(xué)
- 探索綠色環(huán)保公園建設(shè)的多元路徑
- 政府采購企業(yè)的合規(guī)性要求及應(yīng)對
- 教育與技術(shù)的融合構(gòu)建高效學(xué)習(xí)平臺
- 2025年中國桶裝洗發(fā)露市場調(diào)查研究報(bào)告
- 高墩柱墩身施工方案
- 2023年甘肅蘭州大學(xué)網(wǎng)絡(luò)與繼續(xù)教育學(xué)院人員招聘2人高頻考點(diǎn)題庫(共500題含答案解析)模擬練習(xí)試卷
- 肝內(nèi)膽管結(jié)石詳解
- 發(fā)電機(jī)勵磁系統(tǒng)檢修與維護(hù)
- 2023-2024學(xué)年福建省泉州市小學(xué)語文六年級期末自測模擬試卷
- GB 29541-2013熱泵熱水機(jī)(器)能效限定值及能效等級
- 控規(guī)用地代碼
- 2023年上杭縣社區(qū)工作者招聘考試筆試題庫及答案解析
- 2021年曹楊二中自招數(shù)學(xué)試卷
- 新能源汽車底盤檢修全套課件
- 幼兒園大班數(shù)學(xué)口算練習(xí)題可打印
評論
0/150
提交評論