《控制腳本流程》_第1頁
《控制腳本流程》_第2頁
《控制腳本流程》_第3頁
《控制腳本流程》_第4頁
《控制腳本流程》_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

控制腳本流程整理ppt引言如何測試表達式的邏輯值?如何設計分支結(jié)構?如何設計循環(huán)結(jié)構?【問題的提出】Geecy軟件開發(fā)公司的開發(fā)人員Tom所開發(fā)的通訊錄管理腳本phone.sh的改進版本如下:tom@geecy:~$catphone.sh↙#!/bin/bashreadCount<count_file.txtecho"[${Count}]:"echo-n"Enteryourname:"readNameecho-n"Enteryourphonenumber:"readPhoneecho"$Count:$Name:$Phone">>file.txtCount=$((Count+1))echo$Count>count_file.txt./phone.sh【問題的提出】(續(xù))該版本比舊版本已經(jīng)有了很大的改進,能夠滿足一般的使用。但是根據(jù)Tom的開發(fā)經(jīng)驗,該版本至少存在四大缺陷: (1)腳本運行的穩(wěn)定性不高,因為該腳本嚴重依賴于輔助文件count_file.txt,一旦該文件被以外破壞,該腳本將不能正常工作; (2)運行性能不高,因為該腳本在運行過程中需要頻繁讀寫三個文件,而從該腳本的功能來看,運行過程中需要頻繁讀寫的文件應該只有數(shù)據(jù)文件“file.txt”; (3)功能單一,因為目前只有增加功能,還缺乏基本的搜索功能; (4)用戶界面不夠友好,應該使用菜單式的用戶界面。 因此Tom需要繼續(xù)改進該腳本。【問題分析】如果要提高穩(wěn)定性,就要想辦法避免使用輔助文件count_file.txt。最大值就在數(shù)據(jù)文件file.txt的最后一行的第一個數(shù)據(jù)域。只需要想辦法在增加一行新數(shù)據(jù)之前把該值讀出來,然后增加一,就可以構造出下一個編號。命令tail,能夠從一個文本文件的最后一行起,連續(xù)抽取若干行數(shù)據(jù)顯示到屏幕?!締栴}分析】(續(xù))如果上述的穩(wěn)定性問題解決了,那么只需要避免使用腳本的遞歸調(diào)用就可以實現(xiàn)整個運行過程只需要頻繁讀寫一個文件,即數(shù)據(jù)文件file.txt。只要找到能夠重復運行某一部分腳本的替代方法,那么腳本的遞歸調(diào)用這種方法就可以“退役”了?!締栴}分析】(續(xù))對于搜索功能的實現(xiàn),可以使用grep命令來完成?!締栴}分析】(續(xù))菜單式的用戶界面的實現(xiàn)原理,就是首先打印若干個菜單項的內(nèi)容到屏幕上,等待用戶選擇其中一個功能,腳本程序根據(jù)用戶的鍵盤輸入來判斷用戶的選擇,從而進行相應功能的操作。然后重復。測試表達式test命令能夠?qū)Ρ磉_式進行測試并求出True或False的邏輯值。例如: test$Name="Linus"test命令的語法要求被測試的表達式中的比較運算符(例如這里的“=”)的左右兩邊必須有空格。測試表達式(續(xù))test命令可以一次測試多個表達式。這些表達式之間需要使用選項“-a”或“-o”連接。例如:

test$Name="Linus"-a$Country="China"為了有更好的可讀性,用戶可以使用方括號“[]”來代替test命令。例如:

[$Name="Linus"]設計分支結(jié)構分支結(jié)構提供給用戶一種流程控制的能力,能夠讓用戶根據(jù)某些條件作出判斷,然后有所選擇地執(zhí)行某些語句。使用if語句和case語句都可以實現(xiàn)分支結(jié)構。設計分支結(jié)構(續(xù))if語句的基本格式為: if<Condition> then <Commands1> else <Commands2> fi設計分支結(jié)構(續(xù))#!/bin/bashecho-n"Doyouknowtheanswer?(y/n)"readResultif[$Result="y"]then echo"Good!" echo"Congratulations!"else echo"Bad!" echo"Workhard!"fiecho"Finished!"設計分支結(jié)構(續(xù))case語句的基本格式為: case<Variable>in Pattern1) <Commands1> ;; Pattern2) <Commands2> ;; ...... *) <Commands> ;; esac設計分支結(jié)構(續(xù))#!/bin/bashecho-n"Enteraword(dozenorscore):"readStrcase$Strindozen)echo"12";;score)echo"20";;*)echo"Itisneitheradozennorascore.";;esac測試字符串對字符串的測試,除了測試是否相等,還有其他的一些常用的測試。選項作用string如果string的長度不為零,則值為True,否則為False-zstring如果string的長度為零,則值為True,否則為FalseString1=String2如果string1與string2相等,則值為True,否則為FalseString1!=String2如果string1與string2不相等,則值為True,否則為False測試算術式Shell的變量是字符串類型,如果要把變量的內(nèi)容作為數(shù)值進行比較,則需要使用算術測試選項。選項作用-eq等于(Equal)-ne不等于(NotEqual)-gt大于(GreaterThen)-ge大于(GreaterThen)或等于(Equal)-lt小于(LessThen)-le小于(LessThen)或等于(Equal)測試文件選項作

用-eFile如果文件File存在(Exist),則為True-sFile如果文件File存在且文件大小(Size)大于零,則為True-fFile如果文件File存在且是普通文件(File),則為True-dFile如果文件File存在且是目錄(Directory),則為True-bFile如果文件File存在且是塊(Block)特殊文件,則為True-cFile如果文件File存在且是字符(Character)特殊文件,則為True-LFile如果文件File存在且是符號鏈接(Link)文件,則為True測試文件(續(xù))選

項作

用-rFile如果文件File存在且是可讀的(Readable),則為True-wFile如果文件File存在且是可寫的(Writable),則為True-xFile如果文件File存在且是可執(zhí)行的(Executable),則為True-OFile如果文件File存在且屬于當前用戶(Owner),則為True-GFile如果文件File存在且屬于當前用戶組(Group),則為TrueFile1–ntFile2如果文件File1新于(NewerThen)File2,則為TrueFile1–otFile2如果文件File1舊于(OlderThen)File2,則為True設計循環(huán)結(jié)構循環(huán)結(jié)構提供了重復執(zhí)行一段腳本的能力。腳本程序可以使用兩種風格的循環(huán)語句來實現(xiàn)循環(huán)結(jié)構:while循環(huán)和for循環(huán)。設計循環(huán)結(jié)構(續(xù))使用while語句的格式是:

while<Condition> do <Commands> done設計循環(huán)結(jié)構(續(xù))#!/bin/bashCount=1while[$Count-le10]doecho$CountCount=$((Count+1))done設計循環(huán)結(jié)構(續(xù))for語句實現(xiàn)循環(huán)結(jié)構的一種格式是:

for((Expression1;Expression2;Expression3))do <Commands>done設計循環(huán)結(jié)構(續(xù))#!/bin/bashfor((Count=1;Count<=10;Count=Count+1))doecho$Countdone設計循環(huán)結(jié)構(續(xù))for語句實現(xiàn)循環(huán)結(jié)構的另一種格式是:

for<Variable>in<List> do <Commands> done設計循環(huán)結(jié)構(續(xù))#!/bin/bashforFileNamein`ls~`doif[-f~/$FileName]thenecho"Thecontentsof~/${FileName}is:"cat~/$FileNamefiDone【解決方案】#!/bin/bashFile="file.txt"if[-s$File]thenCount=`tail-n1file.txt|cut-d":"-f1`Count=$((Count+1))elseCount="1001"fi【解決方案】(續(xù))whiletruedoclearecho"[0].Exit"echo"[1].Addphonenumber"echo"[2].Searchnameorphonenumber"echo-n"Yourchoice(0,1or2):"readKeycase$Keyin0)exit;;【解決方案】(續(xù))1)clearecho"[${Count}]:"echo-n"Enteryourname:"readNameecho-n"Enteryourphonenumber:"readPhoneecho"$Count:$Name:$Phone">>file.txtCount=$((Count+1));;【解決方案】(續(xù))2)clearecho-n"Inputakeyword:"readWordcleargrep$Word$Fileecho"Pressentertocontinue..."readEnter;;esacDone練習1、編寫一個Shell腳本,從鍵盤讀入5個整數(shù)。然后顯示最大數(shù)、最小數(shù)以及平均值。2、編寫一個Shell腳本,顯示Fibonacci數(shù)列的前20項。例如: 0,1,1,2,3,5,8,13,21...練習(續(xù))3、編寫一個Shell腳本,從鍵盤上接收兩個文件名,如果兩個文件都存在則交換兩個文件的內(nèi)容,否則應給出出錯信息。4、編寫一個shell腳本,產(chǎn)生并輸出如下的序列:

1,2,3,2,3,4,3,4,5,4,5,6…98,99,100練習(續(xù))5、Cell寬帶數(shù)據(jù)公司的客戶服務中心對值班員工的工作質(zhì)量進行跟蹤評價,評價標準是客戶對值班員工的“滿意”投票數(shù)量與總投票數(shù)量的比值。如下表所示: Tenny需要編寫一個shell腳本,讀入“滿意”投票數(shù)量和總投票數(shù)量,然后計算并輸出相應的評定等級。比

值(%)等

級Lessthen70AverageBetween70and95GoodGreaterthen95Excellent練習(續(xù))6、Cell寬帶數(shù)據(jù)公司向客戶提供一種菜單式的查詢服務,如下表所示: Tenny需要編寫一個shell腳本,顯示服務菜單。當客戶選擇某一項服務后輸出相應的服務內(nèi)容。序

號服

稱服

內(nèi)

容1查詢費用(Billquer

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論