教學(xué)材料《Linux操作系統(tǒng)》-項(xiàng)目七_(dá)第1頁(yè)
教學(xué)材料《Linux操作系統(tǒng)》-項(xiàng)目七_(dá)第2頁(yè)
教學(xué)材料《Linux操作系統(tǒng)》-項(xiàng)目七_(dá)第3頁(yè)
教學(xué)材料《Linux操作系統(tǒng)》-項(xiàng)目七_(dá)第4頁(yè)
教學(xué)材料《Linux操作系統(tǒng)》-項(xiàng)目七_(dá)第5頁(yè)
已閱讀5頁(yè),還剩83頁(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)介

任務(wù)一啟動(dòng)Shell【任務(wù)描述】啟動(dòng)Shell,并進(jìn)行Shell編程。【任務(wù)實(shí)施】1.方法1在圖形桌面環(huán)境下運(yùn)行“系統(tǒng)終端”可以執(zhí)行Shell命令。“系統(tǒng)終端”啟動(dòng)后是一個(gè)命令行操作窗口,可以隨時(shí)放大縮小,隨時(shí)關(guān)閉,比較方便。啟動(dòng)“系統(tǒng)終端”的方法是:?jiǎn)螕簟伴_(kāi)始”→“應(yīng)用程序”→“附件”→“系統(tǒng)終端”命令。2.方法2在圖形桌面環(huán)境下,右擊桌面空白處選擇“打開(kāi)終端”命令下一頁(yè)返回任務(wù)一啟動(dòng)Shell【理論知識(shí)】LinuxShell是一種程序,是一個(gè)介于用戶(hù)和Linux內(nèi)核之間的程序,有了它,用戶(hù)就能通過(guò)鍵盤(pán)輸入指令來(lái)操作計(jì)算機(jī)了。Shell會(huì)執(zhí)行用戶(hù)輸入的命令,并且在顯示器上顯示執(zhí)行結(jié)果,這種交互的全過(guò)程都是基于文本的。這種面向命令行的用戶(hù)界面被稱(chēng)為CLI(CommandLineInterface)。在圖形化用戶(hù)界面(GUI)出現(xiàn)之前,人們一直是通過(guò)命令行界面來(lái)操作計(jì)算機(jī)的。現(xiàn)在,基于圖形界面的工具越來(lái)越多,許多工作都不必使用Shell就可以完成了。然而,專(zhuān)業(yè)的Linux用戶(hù)認(rèn)為Shell是一個(gè)非常有用的工具,學(xué)習(xí)Linux時(shí)一定要學(xué)習(xí)Shell,上一頁(yè)下一頁(yè)返回任務(wù)一啟動(dòng)Shell至少要掌握一些基礎(chǔ)知識(shí)和基本的命令。目前,主流的Shell主要有以下幾種:BashShell,CShell,KornShell,PerlShell。BashShell是最流行的一種Shell,大多數(shù)Linux版本對(duì)它都提供默認(rèn)安裝。在這里,建議選用BashShell,本書(shū)所用到的程序都是用BashShell寫(xiě)的。BashShell是一個(gè)比較老的備用版本,它幾乎在所有可運(yùn)行Linux程序的計(jì)算機(jī)上都可獲得。各個(gè)版本的Linux幾乎都支持BashShell。可以將一系列經(jīng)常使用的Linux命令存儲(chǔ)在一個(gè)文件中,Shell可以讀取這個(gè)文件并執(zhí)行其中的命令,這樣的文件被稱(chēng)腳本文件。Shell腳本允許輸入/輸出、操縱變量、上一頁(yè)下一頁(yè)返回任務(wù)一啟動(dòng)Shell控制流程等。執(zhí)行Shell腳本,有如下幾種方法。(1)運(yùn)行/bin/bash命令并且把腳本文件名作為它的參數(shù)。例:$/bin/bashmyfile命令告訴Shell要使用BashShell來(lái)執(zhí)行腳本。(2)為腳本文件加上可執(zhí)行的權(quán)限。然后在$提示符后直接輸入腳本文件的名字來(lái)執(zhí)行該Shell腳本。$chmodu+xmyfile$./myfile上一頁(yè)下一頁(yè)返回任務(wù)一啟動(dòng)Shell(3)最常用的一種方法是使當(dāng)前的Shell使用Bash執(zhí)行腳本,而不管當(dāng)前的Shell版本是什么。#!/bin/bash上一頁(yè)返回任務(wù)二編寫(xiě)一個(gè)簡(jiǎn)單的Shell程序【任務(wù)描述】用以下內(nèi)容建立一個(gè)名叫hello的文件,并執(zhí)行它,查看結(jié)果。echo"hello,"echo"world!"echo"thisismyfirstShellfile."【任務(wù)實(shí)施】(1)打開(kāi)vi編輯器。(2)按圖7?1所示,輸入語(yǔ)句,并保存文件,文件名為hello。(3)輸入以下語(yǔ)句,執(zhí)行這個(gè)文件。下一頁(yè)返回任務(wù)二編寫(xiě)一個(gè)簡(jiǎn)單的Shell程序$bashhello執(zhí)行結(jié)果如下。Hello,world!thisismyfirstShellfile.【理論知識(shí)】1.echo命令echo命令用于在屏幕上顯示消息。例如:$echo"Helloworld!"Helloworld!$上一頁(yè)下一頁(yè)返回任務(wù)二編寫(xiě)一個(gè)簡(jiǎn)單的Shell程序echo命令在屏幕上顯示括在“”內(nèi)的文本。默認(rèn)情況下,echo顯示完文本后光標(biāo)會(huì)移動(dòng)到下一行。也可以使用?n選項(xiàng),把光標(biāo)保持在同一行。例如:$echo–n"Helloworld!"Helloworld!$2.插入注釋在Shell腳本中可以包含注釋?zhuān)ㄟ^(guò)關(guān)鍵字#來(lái)注釋一條語(yǔ)句。當(dāng)Shell遇到#時(shí),將會(huì)忽略該行的內(nèi)容。上一頁(yè)下一頁(yè)返回任務(wù)二編寫(xiě)一個(gè)簡(jiǎn)單的Shell程序例:#thisismyfirstShellfile.echo"hello,"echo"world!"在這個(gè)例子中,第一行是一條注釋?zhuān)鼘⒈籗hell忽略,而且不產(chǎn)生任何輸出。上一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)【任務(wù)描述】將從鍵盤(pán)輸入的一串職工信息保存在文件中,統(tǒng)計(jì)職工數(shù),并將職工信息輸出至屏幕,并要求用字母m代替1顯示。【任務(wù)實(shí)施】(1)啟動(dòng)Shell,并在$提示符后輸入以下語(yǔ)句:cat>testfile(按Enter鍵)。(2)在光標(biāo)處輸入以下數(shù)據(jù)(必須要換行)。zhang1li2wang1xu1下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)yang2按Ctrl+D鍵結(jié)束輸入。(3)打開(kāi)vi編輯器。(4)按圖7?2所示,輸入語(yǔ)句,并保存文件,文件名為count。(5)輸入以下語(yǔ)句,執(zhí)行這個(gè)文件。$bashcount可以看到執(zhí)行結(jié)果如下。zhang1li2wang1上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)xu1yang25zhangmli2wangmxumyang2【理論知識(shí)】1.標(biāo)準(zhǔn)輸入/輸出文件在Linux中,每一個(gè)進(jìn)程都有3個(gè)特殊的文件描述指針:上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)標(biāo)準(zhǔn)輸入(StandardInput,文件描述指針為0)、標(biāo)準(zhǔn)輸出(StandardOutput,文件描述指針為1)、標(biāo)準(zhǔn)錯(cuò)誤輸出(StandardError,文件描述指針為2)。1)標(biāo)準(zhǔn)輸入文件在Linux中,當(dāng)用戶(hù)執(zhí)行需要輸入的命令時(shí),Shell把鍵盤(pán)作為默認(rèn)的輸入源,鍵盤(pán)稱(chēng)為標(biāo)準(zhǔn)輸入文件。看下面這個(gè)例子,它從鍵盤(pán)讀入一個(gè)數(shù),并將其輸出到屏幕。$readm8$echo$m8上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)在這個(gè)例子中,第一行是用來(lái)從鍵盤(pán)讀入一個(gè)數(shù)并賦給變量m,第二行是用戶(hù)輸入的值,第三行是用來(lái)輸出這個(gè)變量的值。2)標(biāo)準(zhǔn)輸出文件Shell把顯示器作為它執(zhí)行的任何命令輸出的默認(rèn)目的地,顯示器稱(chēng)為標(biāo)準(zhǔn)輸出文件。例:$lsls命令顯示目錄中的文件和子目錄的名稱(chēng)。Shell執(zhí)行此命令,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出文件。3)標(biāo)準(zhǔn)錯(cuò)誤文件Shell程序在顯示器上顯示錯(cuò)誤消息,上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)對(duì)于產(chǎn)生錯(cuò)誤可能的原因有:無(wú)效的命令,沒(méi)用許可的命令。顯示器也是標(biāo)準(zhǔn)錯(cuò)誤文件。2.重定向重定向改變關(guān)于標(biāo)準(zhǔn)輸入/輸出及錯(cuò)誤的分配。當(dāng)使用了重定向以后,命令的輸入可從非鍵盤(pán)的文件中取得。同樣地,命令的輸出或錯(cuò)誤可寫(xiě)到文件中或打印出來(lái),而不在顯示器上顯示出來(lái)。有3種重定向:輸入重定向、輸出重定向、錯(cuò)誤重定向。1)輸入重定向輸入重定向用來(lái)代替來(lái)自標(biāo)準(zhǔn)輸入的文件,可來(lái)自磁盤(pán)文件的標(biāo)準(zhǔn)輸入。上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)例:$readm<file1<表示輸入重定向是來(lái)自于硬盤(pán)上文件file1,read命令將把文件file1的第一行內(nèi)容賦給m變量。2)輸出重定向輸出重定向也就是將某個(gè)命令執(zhí)行后應(yīng)該出現(xiàn)在屏幕上的數(shù)據(jù),傳輸?shù)狡渌胤剑缥募⒋蛴C(jī)等。當(dāng)輸出重定向到文件時(shí),在輸出發(fā)送到文件之前,先作為空文件創(chuàng)建在磁盤(pán)上。但是如果文件已存在,則在輸出寫(xiě)入文件之前會(huì)先刪除文件中的內(nèi)容。例:$ls>allfile也可使用以下帶文件描述符的命令。上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)$ls1>allfile$ls1>>allfile上例中的1表示文件描述符,它不是必須的,但是可使命令更清晰。>或>>意義相同,但>>是將新的數(shù)據(jù)添加至文件的末尾。3)錯(cuò)誤重定向錯(cuò)誤重定向可將錯(cuò)誤消息不顯示在屏幕上,而輸出到文件中。例:$catmyfile2>errorfilecat命令的含義是輸出文件myfile的內(nèi)容,當(dāng)文件不存在時(shí),會(huì)輸出錯(cuò)誤信息。注意這里的2是必須的,上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)代表標(biāo)準(zhǔn)錯(cuò)誤輸出,可使用2>或2>>。3.管道在Shell程序執(zhí)行時(shí),會(huì)出現(xiàn)輸出的數(shù)據(jù)。那么,如果有一些數(shù)據(jù)必須經(jīng)過(guò)幾次處理之后才能得到所想要的格式,這時(shí)可采用管道命令。Linux系統(tǒng)允許前一次的輸出成為后面一條命令的輸入。管道命令“|”的前后都是“命令”。圖7?3說(shuō)明了管道的含義。下面看一看基本的管道命令。1)grep過(guò)濾器grep過(guò)濾器會(huì)分析一行消息,若其中有需要的消息,則會(huì)將一行數(shù)據(jù)取出。上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)格式:grep模式[文件名]例:$grep"hello"myfileHello,everyone!$這個(gè)例子中的文件名是任選的,沒(méi)有文件名,grep認(rèn)為是標(biāo)準(zhǔn)輸出;雙引號(hào)也是可選的。每當(dāng)用戶(hù)輸出一行,grep會(huì)尋找該行的模式,如果匹配,則顯示該行。當(dāng)用戶(hù)按Ctrl+D鍵時(shí)則輸入結(jié)束,停止執(zhí)行。例:$grep"hello"hello,everyone!上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)hello,everyone!Iamjack.Whoareyou?<ctrl>d在這個(gè)例子中,當(dāng)用戶(hù)輸入“hello,everyone!”“Iamjack.”“Whoareyou?”時(shí),grep尋找單詞hello,當(dāng)它找到單詞hello時(shí),它又在屏幕上顯示“hello,everyone!”,這也是為什么會(huì)在輸出中看到兩行相同的語(yǔ)句的原因。2)cutcut也就是“切”的意思,上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)言下之意就是將一段消息的某一部分“切”出來(lái)。

格式:cut[選項(xiàng)][文件名/s]選項(xiàng)有以下3種。?d:后面接分隔符,一般與?f一起使用。?c:以字符為單位取出固定的字符范圍。?f:取出特定的幾段(列)。例:$cut–d':'?f3logname本例中,cut命令用來(lái)抽取logname文件中的第三列字符串,字段分隔符是‘:’。運(yùn)行結(jié)果如圖7?4所示。例:$cut–c1?5logname上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)該命令將顯示文件logname中前5個(gè)字符,顯示結(jié)果為:zhang。例:$cut–d':'–f1,6logname該命令顯示文件logname第1列和第6列,顯示結(jié)果為:zhang:678。3)wc過(guò)濾器用wc可統(tǒng)計(jì)文件中或標(biāo)準(zhǔn)輸入中行、單詞及字符的個(gè)數(shù)。格式:$wc[?lwm]各參數(shù)的意義如下:?l:僅顯示l行。上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)?w:僅顯示w字(英文)。?m:僅顯示m字符。例:$wcusername4417username文件username有4行、4個(gè)單詞、17個(gè)字符。例:$catusername|wc4417本例中使用了管道,統(tǒng)計(jì)了文件username中的行數(shù)、單詞數(shù)及字符數(shù)。wc是相當(dāng)有用的統(tǒng)計(jì)命令,例如,要知道當(dāng)前用戶(hù)文件中的用戶(hù)數(shù),就可以使用wc命令來(lái)統(tǒng)計(jì),命令為:catusername|wc?l,上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)因?yàn)樵谖募镆恍斜硎疽粋€(gè)用戶(hù),所以知道行數(shù)就知道用戶(hù)數(shù)了。4)tr命令tr可以用來(lái)刪除一段信息中的文字,也可以進(jìn)行轉(zhuǎn)換,將一種字符轉(zhuǎn)換為另外一種字符。格式:$tr[?ds]字符串1……各參數(shù)的意義如下:?d:刪除消息中的字符串1。?s:替換重復(fù)的字符。例:$tr':'''<logname。該命令將會(huì)在標(biāo)準(zhǔn)輸出上顯示該文件的內(nèi)容,并用空格替代:上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)顯示。要注意的是,僅僅在輸出時(shí):被換為了空格,而該文件的內(nèi)容并沒(méi)有改變。運(yùn)行結(jié)果如圖7?5所示。tr命令還可進(jìn)行大小寫(xiě)轉(zhuǎn)換。例:$tr'[a?z]''[A?Z]'<lognameZHANG:1234:LI:1234:ZHANG:678:WANG:895)管道命令示例例如:用last命令查看最近的登錄者的信息,要求僅顯示用戶(hù)名稱(chēng)。$lastzjxpts/2:0.0SatJul1115:26stitllloggedin上一頁(yè)下一頁(yè)返回任務(wù)三統(tǒng)計(jì)文件中的單詞數(shù)zjxpts/2:0.0SatJul1114:40–15:26(00:45)zjxpts/2:0.0SatJul1114:37–14:39(00:01)$last|cut–c1?5zjxzjxzjx例如:用管道命令統(tǒng)計(jì)文件username中的字符、行、單詞數(shù)。$catusername|wc結(jié)果:4417上一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件【任務(wù)描述】需要從鍵盤(pán)讀入一位職工的年齡,并將其保存入文件中,以便以后查閱,要求必須使用變量。通過(guò)本任務(wù),可學(xué)會(huì)變量的使用。【任務(wù)實(shí)施】(1)打開(kāi)vi編輯器。(2)輸入以下內(nèi)容,并保存文件,文件名為varfile。echo"pleaseinputoneage:"readageecho$age>agefilecatagefile下一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件(3)在提示符后輸入以下命令。$bashvarfile執(zhí)行結(jié)果如下。Pleaseinputoneage:4545(4)運(yùn)行結(jié)果如圖7?6所示。【理論知識(shí)】1.變量的分類(lèi)Linux使用以下兩種變量。局部變量:由用戶(hù)建立,僅供用戶(hù)所設(shè)計(jì)的程序使用。上一頁(yè)下一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件環(huán)境變量:由用戶(hù)或他人建立,所有用戶(hù)都可以使用。當(dāng)程序需要保存數(shù)據(jù)時(shí),可以聲明一個(gè)局部變量,這個(gè)局部變量只能在被聲明的程序中使用。當(dāng)啟動(dòng)Linux系統(tǒng)時(shí),可以看到一連串的變量,這些變量就是環(huán)境變量,它們包含許多關(guān)于用戶(hù)和計(jì)算機(jī)的信息。2.創(chuàng)建變量在BashShell中,變量不是必須被顯式聲明的,可以在任何時(shí)候通過(guò)簡(jiǎn)單的賦值來(lái)創(chuàng)建。所有的變量都由字符串組成創(chuàng)建變量的語(yǔ)法為:<變量名>=<值>要注意的是:當(dāng)聲明一個(gè)變量時(shí),賦值操作符(=)的兩邊必須沒(méi)有空格。上一頁(yè)下一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件例:$message="helloworld"Shell腳本中的變量不能被聲明為整型或字符型,在Linux中的所有變量都被當(dāng)做字符串,但是,可以進(jìn)行數(shù)學(xué)運(yùn)算。任何在腳本中創(chuàng)建的變量,當(dāng)腳本停止執(zhí)行時(shí)都會(huì)消失,但在提示符下創(chuàng)建的變量會(huì)被保留,直到系統(tǒng)注銷(xiāo)終止Shell時(shí)為止。3.給變量賦值1)引用變量$符號(hào)用于引用一個(gè)變量的內(nèi)容。將一個(gè)變量的值賦給另外一個(gè)變量的命令是:變量1=${變量2},“{}”是可省的例:$x=8上一頁(yè)下一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件$y=$x$echo$y2)將鍵盤(pán)輸入值賦給變量例:$readmynamestudent在本例中student被賦給了變量myname。可以通過(guò)下面的echo命令顯示該變量的值。$echo$myname有時(shí)候變量名很容易與其他文字混淆。例:order=2echo"thisisthe$ordernd"上一頁(yè)下一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件屏幕并不會(huì)輸出“thisisthe2nd”,而僅僅輸出“thisisthe”。Shell會(huì)去搜索變量ordernd的值,但是這個(gè)變量卻沒(méi)有值。可以使用花括號(hào)來(lái)告訴Shell要輸出的是order變量。order=2echo"thisisthe${order}nd"將輸出:thisisthe2nd。3)expr命令絕大部分Shell不支持?jǐn)?shù)字變量,所有變量都被當(dāng)作字符串處理。那么要操作一些數(shù)字怎么辦呢?可以使用expr命令,該命令用于求算術(shù)表達(dá)式的值。上一頁(yè)下一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件例:$expr5+5該命令將會(huì)顯示10,要注意的是:在運(yùn)算符(+)兩邊必須有空格,也可以使用變量實(shí)現(xiàn)。例:$a=5$b=7$expr$a+$b124)算術(shù)展開(kāi)可以在$((…))中含一個(gè)表達(dá)式,可以用下面的格式來(lái)計(jì)算一個(gè)表達(dá)式的值。$((expression))上一頁(yè)下一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件例:$echo$((12+32))44也可以在括號(hào)中含有變量。例:$a=10$b=30$echo$((a+b))4.環(huán)境變量上一頁(yè)下一頁(yè)返回任務(wù)四讀入數(shù)并保存至文件由于Linux是多用戶(hù)系統(tǒng),每個(gè)用戶(hù)都分配一個(gè)Shell的副本用于工作。Shell也有稱(chēng)為環(huán)境變量的特殊變量,通過(guò)這些變量,用戶(hù)可以配置環(huán)境。環(huán)境變量都是大寫(xiě)的,本書(shū)不對(duì)環(huán)境變量進(jìn)行討論,因?yàn)橥ǔG闆r下僅僅在登錄腳本中使用環(huán)境變量。一些環(huán)境變量的例子有:HOME、PS1、PS2、PATH、LOGNAME、SHLVL和SHELL。上一頁(yè)返回任務(wù)五運(yùn)算符的使用在日常生活中,會(huì)不經(jīng)意地用到一些運(yùn)算符,如去超市購(gòu)物、菜場(chǎng)買(mǎi)菜,會(huì)用到加、減等運(yùn)算符。在Shell編程中,也仍少不了它們的身影,唯有它們,程序才能鮮活、生動(dòng)起來(lái)【任務(wù)描述】有一個(gè)神奇的智能計(jì)算器,當(dāng)小孩輸入兩個(gè)整數(shù)時(shí),它會(huì)自動(dòng)輸出這個(gè)數(shù)的和。小孩覺(jué)得太好了,他再也不怕媽媽出加法題了。現(xiàn)請(qǐng)讀者幫小孩實(shí)現(xiàn)這樣的神奇的智能計(jì)算器。【任務(wù)實(shí)施】(1)打開(kāi)vi編輯器。(2)在vi編輯器中輸入語(yǔ)句,并保存文件,文件名為calculator,語(yǔ)句內(nèi)容如圖7?7所示。下一頁(yè)返回任務(wù)五運(yùn)算符的使用(3)退出vi編輯器,并在提示符后輸入語(yǔ)句:bashcalculator。(4)運(yùn)行結(jié)果如圖7?8所示。【理論知識(shí)】在讓計(jì)算機(jī)修改一些數(shù)據(jù)的時(shí)候,必須讓計(jì)算機(jī)知道用一個(gè)或多個(gè)運(yùn)算符執(zhí)行某種操作。Linux共有3類(lèi)運(yùn)算符:算術(shù)運(yùn)算符、邏輯運(yùn)算符和比較運(yùn)算符,還包括test和[]命令1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符可以讓變量進(jìn)行加、減、乘、除等操作。算術(shù)運(yùn)算符主要有+、?、*(乘)、/(除)、%(求余)。例:$leta=2上一頁(yè)下一頁(yè)返回任務(wù)五運(yùn)算符的使用$letb=9$letsum=$a+$b$echo$sum提示/備注:等號(hào)兩邊沒(méi)有空格,而加號(hào)兩邊有空格,且對(duì)所有的運(yùn)算符來(lái)說(shuō)兩邊都要求有空格。2.邏輯運(yùn)算符可以用邏輯運(yùn)算符判斷一個(gè)表達(dá)式的真和假。真值是任何一個(gè)非零的值,假值就是零。表7?1

列出了常用的邏輯運(yùn)算符。例:$s=3$expr$s!=4上一頁(yè)下一頁(yè)返回任務(wù)五運(yùn)算符的使用1$expr$s!=303.比較運(yùn)算符比較運(yùn)算符通過(guò)比較兩個(gè)數(shù)或者兩個(gè)字符串的值來(lái)得出它們的關(guān)系。表7?2列出了常用的比較運(yùn)算符。4.test和[]命令test命令用于求值表達(dá)式,并返回0(true)或1(false),test關(guān)鍵字也可用[]代替。格式:test表達(dá)式上一頁(yè)下一頁(yè)返回任務(wù)五運(yùn)算符的使用[表達(dá)式]例:$s=4說(shuō)明:“=”的兩邊必須沒(méi)有空格。$test$s=4說(shuō)明:“=”的兩邊必須有空格。$echo“$?”0指令說(shuō)明如下:s=4建立一個(gè)名為s的變量,并將值4賦給它。test$s=4讓計(jì)算機(jī)判斷變量s的值是否等于4。echo“$?”將test返回的值顯示在屏幕上。上一頁(yè)下一頁(yè)返回任務(wù)五運(yùn)算符的使用0就是顯示的結(jié)果。思考:第二條指令還可怎么寫(xiě)?提示:可以寫(xiě)成[$s=4],但必須要注意的是,“[”之后和“]”之前必須要有空格。上一頁(yè)返回任務(wù)六控制程序流程人們把決定建立在符合某種條件的基礎(chǔ)上,現(xiàn)在有足夠的錢(qián)去旅行嗎?如果沒(méi)有,那只有待在家里了。Shell程序通過(guò)某種條件測(cè)試,然后得出結(jié)論,也是做決定的實(shí)例。在本任務(wù)中,將介紹如何根據(jù)條件讓程序做出相應(yīng)的決定。【任務(wù)描述】小明今年五歲了,他很喜歡做有關(guān)數(shù)字的游戲。可是他家人很忙,沒(méi)有時(shí)間與他一起游戲,讀者能幫幫他嗎?能與小明一起游戲嗎?讀者可編寫(xiě)一個(gè)加法游戲的程序幫助小明實(shí)現(xiàn)這一需求。【任務(wù)實(shí)施】下一頁(yè)返回任務(wù)六控制程序流程(1)打開(kāi)vi編輯器。(2)輸入以下代碼,并保存文件,保存的文件名為user。echo"&&&這是一個(gè)幼兒學(xué)數(shù)學(xué)的軟件&&&"echo"練習(xí)共六題"while[true]doecho"1.加法練習(xí)"echo""echo"2.退出"readscase$sin上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程1)foriin24doforjin135doecho–n$i+$jecho–n"=請(qǐng)輸入答案:"readanif[$an–eq$(($i+$j))]thenecho"答案正確,你真聰明!"上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程elseecho"答案不正確,不要泄氣!"fidonedone;;2)break;;*)echo"輸入錯(cuò)誤,請(qǐng)重新選擇!!"上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程;;esacdone(3)在提示符下輸入以下命令。$bashuser運(yùn)行結(jié)果如圖7?9所示。分析:在這個(gè)任務(wù)中使用到了循環(huán)的嵌套,在設(shè)計(jì)界面時(shí),一般都會(huì)用while循環(huán),并通過(guò)break退出循環(huán)。【理論知識(shí)】1.if語(yǔ)句當(dāng)需要程序判斷一個(gè)條件是真還是假時(shí),可以使用if語(yǔ)句。上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程if語(yǔ)句告訴程序:“如果條件為真,則執(zhí)行這些指令,否則跳過(guò)這些指令。”語(yǔ)法:if[條件]then指令1else指令2fi如果條件為真時(shí),程序?qū)?zhí)行指令1;如果條件為假時(shí),程序?qū)?zhí)行指令2。上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程例:$echo"pleaseinputonenumber:"$readanswer8$if[$answer–glt10]>then說(shuō)明:當(dāng)指令沒(méi)有全部輸完且按了回車(chē)鍵時(shí),提示符就會(huì)變?yōu)椤?gt;”。>echo"thenumber>10">else>echo"thenumber<=10">fithenumber<=10上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程$指令說(shuō)明如下。第一條語(yǔ)句的作用是輸出一條提示信息,提示用戶(hù)應(yīng)輸入一個(gè)數(shù)。第二條語(yǔ)句的作用是從鍵盤(pán)讀入一個(gè)數(shù),并將數(shù)賦給變量answer。8是用戶(hù)從鍵盤(pán)輸入的值。第三條if語(yǔ)句的作用是當(dāng)用戶(hù)輸入的數(shù)大于10時(shí),給出提示信息“thenumber>10”,當(dāng)用戶(hù)輸入的數(shù)小于或等于10時(shí),給出提示信息“thenumber<=10”。Linux還提供了if...elif構(gòu)造,語(yǔ)法如下。if(條件)上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程then指令elif條件then指令else指令fi在這個(gè)格式中,elif等同于“elseif”,一個(gè)if構(gòu)造可以有多個(gè)elif語(yǔ)句,但是只能有一個(gè)else和一個(gè)fi來(lái)終止該構(gòu)造。else部分是可選的。例:echo"enteranumber"readno上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程if[$no–let5]thenecho"thenumber<=5"elif[$no–ge5–a$no–lt10]thenecho"thenumberisbetween5and10"elseecho"thenumber>=10"fi在上面的例子中,當(dāng)執(zhí)行Shell腳本時(shí),它要求用戶(hù)輸入一個(gè)數(shù)字。如果該數(shù)字小于等于5,上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程則顯示消息“thenumber<=5”;如果該數(shù)字在5和10之間,則顯示消息“thenumberisbetween5and10”;如果該數(shù)大于等于10,則顯示消息“thenumber>=10”。2.case語(yǔ)句假設(shè)要設(shè)計(jì)這樣一個(gè)程序,對(duì)不同年齡的用戶(hù)顯示不同的信息。當(dāng)然可以使用if語(yǔ)句來(lái)設(shè)計(jì)這樣的程序,不過(guò)這段很難讓人看懂,如果想獲得同樣的結(jié)果又不想太復(fù)雜,那么可使用case語(yǔ)句。case...esac根據(jù)變量的值來(lái)執(zhí)行一組特定指令,常常用來(lái)替代if語(yǔ)句。case語(yǔ)句的功能是:把case右邊的值和半括號(hào)“)”左邊的值比較,其語(yǔ)法規(guī)則如下。case變量名in上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程值1)指令;;值2)指令;;esaccase語(yǔ)句中,以case開(kāi)頭,以esac結(jié)尾。它首先檢查變量的值,如果它與值1相等則執(zhí)行第一組指令;如果它與值2相等則執(zhí)行第二組指令,以此類(lèi)推。在每組指令的最后需要用兩個(gè)分號(hào)(;;)。上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程在使用case語(yǔ)句時(shí),必須要注意以下幾點(diǎn)。(1)程序要匹配的值必須包含一個(gè)或多個(gè)字符。(2)可以用一個(gè)變量或值作為程序要匹配的值。(3)一個(gè)變量或值的右邊必須以半括號(hào)“)”結(jié)尾。例:echo"inputonenumber(1?3):"readncase$nin1)echo"hi,child!";;2)上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程echo"hi,student";;3)echo"hi,everyone";;esac程序運(yùn)行結(jié)果示例如下。inputonenumber(1?3):2hi,student在case語(yǔ)句中,如果用戶(hù)沒(méi)有給程序提供所需要的匹配值上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程那么程序就找不到它所要匹配的對(duì)象。不過(guò),可以使用保留字符(*)提供一種默認(rèn)情況,讓程序在此情況下執(zhí)行一些操作。例:echo"inputonenumber(1?3):"readncase$nin1)echo"hi,child!";;2)echo"hi,student"上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程;;3)echo"hi,everyone";;*)echo"sorry,yournumberisnotonmylist."esac如果case語(yǔ)句中沒(méi)與變量相匹配的值時(shí),就會(huì)執(zhí)行最后一條指令,顯示信息:sorry,yournumberisnotonmylist。case語(yǔ)句經(jīng)常與程序的用戶(hù)界面一起使用。上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程用戶(hù)界面等待用戶(hù)輸入值,當(dāng)用戶(hù)輸完選項(xiàng)后,程序就用case語(yǔ)句把該選項(xiàng)與某些特定的值做比較。提示/備注:建議用縮進(jìn)格式書(shū)寫(xiě)每一個(gè)嵌套語(yǔ)句,這樣寫(xiě)便于閱讀程序,是一種良好的編程風(fēng)格。3.while語(yǔ)句有時(shí)會(huì)要求計(jì)算機(jī)重復(fù)執(zhí)行同一條或同一組指令多次,可以根據(jù)需要把那些指令復(fù)制到程序中其他新的語(yǔ)句行上來(lái)達(dá)到這種目的。不過(guò),更好的方法是讓計(jì)算機(jī)重復(fù)執(zhí)行那些已有的指令,這個(gè)過(guò)程稱(chēng)為循環(huán)。while循環(huán)的一般格式如下。while[條件]上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程do指令done當(dāng)程序遇到一個(gè)while循環(huán)時(shí),首先檢測(cè)它的條件,詢(xún)問(wèn)它“這個(gè)條件是真還是假?”當(dāng)條件為真時(shí),程序才會(huì)讀入while循環(huán)體中的指令。例:a=1while[$a–le10]doecho$a((a=$a+1))上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程done上面這個(gè)代碼將會(huì)顯示1~10的數(shù)字。4.until語(yǔ)句until循環(huán)與while循環(huán)相反,它是當(dāng)條件成立時(shí),就終止循環(huán),否則就持續(xù)執(zhí)行循環(huán)程序段。格式:until[條件]do指令Done例:a=1上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程until[$a–gt10]doecho$a((a=$a+1))done上面這部分代碼將會(huì)顯示數(shù)字1~10。5.for語(yǔ)句當(dāng)知道循環(huán)執(zhí)行的具體次數(shù)時(shí),可以使用for循環(huán)。格式:for變量in值列表do上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程指令done或者:for((表達(dá)式1;表達(dá)式2;表達(dá)式3))do指令done例:forcustomerinTomJackKittydoecho"Hello,$customer."done上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程這個(gè)程序的運(yùn)行過(guò)程如下。(1)先從值列表中取出第一個(gè)值,并將它賦給變量customer。(2)然后,程序?qū)g迎詞輸出在屏幕上。(3)程序返回,再取第二個(gè)值將它賦給customer。這個(gè)程序一直運(yùn)行到值列表中的值使用完,forin循環(huán)終止例:for((a=1;a<=10;a=a+1))doecho$adone這個(gè)例子將會(huì)顯示1~10的值,它的運(yùn)行過(guò)程如下:上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程a的值被初始化為1,然后再檢查a的值是否小于或等于10;若是的話(huà),則執(zhí)行echo命令,然后再將a的值加1,繼續(xù)執(zhí)行直到a的值大于10為止。6.break和continue命令break和continue的使用是與while循環(huán)緊密相連的。break命令可以快速退出循環(huán),continue可以使程序跳過(guò)循環(huán)中continue后面的其余指令,并返回到循環(huán)的開(kāi)始。比較以下兩個(gè)程序段的執(zhí)行結(jié)果。上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程上一頁(yè)下一頁(yè)返回任務(wù)六控制程序流程【知識(shí)拓展】在創(chuàng)建菜單界面時(shí),通常都要用到while循環(huán)。在任何程序菜單中,程序執(zhí)行的順序如下。(1)顯示菜單。(2)選擇菜單項(xiàng)。(3)運(yùn)行相關(guān)程序。(4)返回菜單進(jìn)一步選擇。在設(shè)計(jì)菜單程序時(shí),最簡(jiǎn)單的方法就是把所有的指令都放在while循環(huán)中,在程序每次執(zhí)行完用戶(hù)的選擇后,返回到while循環(huán),重新開(kāi)始。上一頁(yè)返回任務(wù)七使用正則表達(dá)式正則表達(dá)式是一種處理字符串的方法,以行為單位進(jìn)行字符串處理,通過(guò)一些特殊符號(hào)的輔助,可以讓用戶(hù)輕松搜索/替換一些字符串。目前有許多軟件都支持正則表達(dá)式,最常見(jiàn)的是“郵件服務(wù)器”,通過(guò)正則表達(dá)式,可以刪除一些廣告信件及垃圾信件。【任務(wù)描述】現(xiàn)有一個(gè)讀者借閱文件book,要求查出名叫Jack的同學(xué)的所有借閱信息。【任務(wù)實(shí)施】(1)打開(kāi)Shell,進(jìn)入提示符狀態(tài)。(2)在提示符后輸入以下語(yǔ)句,并按回車(chē)鍵。下一頁(yè)返回任務(wù)七使用正則表達(dá)式$grep–n'Jack'book3)可以看到,語(yǔ)句的運(yùn)行結(jié)果如下。1:2009?6?1Jackc#program3:2009?6?2Jacksql20085:2009?6?3Jackthinkinginjavabook文件的內(nèi)容如下。2009?6?1JackC#program2009?6?1Tomxml2009?6?2Jacksql20082009?6?2lilyxml2009?6?3Jackthinkinginjava上一頁(yè)下一頁(yè)返回任務(wù)七使用正則表達(dá)式2009?6?4lily在做該項(xiàng)目時(shí),可先用vi建立該book文件。【理論知識(shí)】正則表達(dá)式是處理字符串的標(biāo)準(zhǔn)表示方式,它需要一些工具程序來(lái)支持。支持正則表達(dá)式的常用的工具有:awk、ed、grep、sed及vi等,不過(guò)這些工具對(duì)正則表達(dá)式的支持程序是不同的。1.正則表達(dá)式操作符常用的正則表達(dá)式操作符如表7?3所示。2.正則表達(dá)式使用示例一個(gè)最簡(jiǎn)單的具有字符串選取功能的工具程序是grep。上一頁(yè)下一頁(yè)返回任務(wù)七使用正則表達(dá)式在grep中使用正則表達(dá)式可以將grep的功能發(fā)揮得淋漓盡致。下面就通過(guò)一些例子來(lái)說(shuō)明正則表達(dá)式在grep中的使用。首先來(lái)了解一下grep的語(yǔ)法。格式:$grep[?acinv]“搜索字符串”文件名參數(shù)的含義如下。?a:在

溫馨提示

  • 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)論