Linux課程設(shè)計(jì)報(bào)告.doc_第1頁
Linux課程設(shè)計(jì)報(bào)告.doc_第2頁
Linux課程設(shè)計(jì)報(bào)告.doc_第3頁
Linux課程設(shè)計(jì)報(bào)告.doc_第4頁
Linux課程設(shè)計(jì)報(bào)告.doc_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Linux課程設(shè)計(jì)設(shè)計(jì)題目: shell 編程實(shí)現(xiàn)用戶信息管理專 業(yè): 軟件工程 指導(dǎo)教師: 蔡照鵬 王斌斌 班 級: 學(xué) 號: 姓 名: 同 組 人: 計(jì)算機(jī)科學(xué)與工程學(xué)院前言Linux是一種自由和開放源碼的類Unix操作系統(tǒng),存在著許多不同的Linux版本,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中。Linux是一個領(lǐng)先的操作系統(tǒng),世界上運(yùn)算最快的10臺超級計(jì)算機(jī)運(yùn)行的都是Linux操作系統(tǒng)。嚴(yán)格來講,Linux這個詞本身只表示Linux內(nèi)核,但實(shí)際上人們已經(jīng)習(xí)慣了用Linux來形容整個基于Linux內(nèi)核,并且使用GNU 工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。Linux得名于天才程序員林納斯托瓦茲。 Linux操作系統(tǒng)是UNIX操作系統(tǒng)的一種克隆系統(tǒng),它誕生于1991 年的10 月5 日(這是第一次正式向外公布的時(shí)間)。以后借助于Internet網(wǎng)絡(luò),并通過全世界各地計(jì)算機(jī)愛好者的共同努力,已成為今天世界上使用最多的一種UNIX 類操作系統(tǒng),并且使用人數(shù)還在迅猛增長。 Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是一個基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。它能運(yùn)行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。它主要用于基于Intel x86系列CPU的計(jì)算機(jī)上。這個系統(tǒng)是由全世界各地的成千上萬的程序員設(shè)計(jì)和實(shí)現(xiàn)的。其目的是建立不受任何商品化軟件的版權(quán)制約的、全世界都能自由使用的Unix兼容產(chǎn)品。目錄一、系統(tǒng)環(huán)境1 1.1硬件環(huán)境1 1.2軟件環(huán)境1二、設(shè)計(jì)目的和要求1三、課程設(shè)計(jì)內(nèi)容2四、總體設(shè)計(jì)2 4.1部分功能模塊流程圖2 4.2總體功能模塊圖4五、詳細(xì)設(shè)計(jì)5 5.1模塊功能說明5 5.2系統(tǒng)中shell主要命令說明5六、調(diào)試與測試7 6.1調(diào)試方法7 6.2測試結(jié)果的分析與討論11七、設(shè)計(jì)中遇到的問題及解決方法12八、源程序清單13九、總結(jié)21參考文獻(xiàn)223一、系統(tǒng)環(huán)境1.1硬件環(huán)境CPU:Intel(R) Core(TM)2 Duo CPU E7500 2.93GHz內(nèi)存:2.93 GHz,2.00GB軟件:VC6.0、VMware Workstation、CentOS1.2軟件環(huán)境操作系統(tǒng):Windows 7、 Linux編程工具、編程語言: shell編程語言Shell編程語言簡介:shell 是操作系統(tǒng)的最外層。shell 合并編程語言以控制進(jìn)程和文件,以及啟動和控制其它程序。shell 通過提示您輸入,向操作系統(tǒng)解釋該輸入,然后處理來自操作系統(tǒng)的任何結(jié)果輸出來管理您與操作系統(tǒng)之間的交互。shell 提供了與操作系統(tǒng)通信的方式。此通信以交互的方式(來自鍵盤的輸入立即操作)或作為一個 shell 腳本執(zhí)行。shell 腳本是 shell 和操作系統(tǒng)命令的序列,它存儲在文件中。二、設(shè)計(jì)目的和要求掌握linux操作系統(tǒng)中shell腳本編程技術(shù)中的:變量定義、變量使用、循環(huán)控制結(jié)構(gòu)、條件選擇結(jié)構(gòu)、用戶交互、文件讀寫、文本內(nèi)容分析以及l(fā)inux重要命令的使用等。以驗(yàn)證學(xué)生對于shell腳本編程的掌握情況。要求學(xué)生能夠利用shell腳本編程實(shí)現(xiàn)較為基本的功能。Linux作為多用戶、多任務(wù)的操作系統(tǒng),其系統(tǒng)資源是所有用戶共享的。對用戶的管理是操作系統(tǒng)的重點(diǎn)。LINUX課程設(shè)計(jì)要用shell編程實(shí)現(xiàn),將理論學(xué)習(xí)付諸實(shí)踐。設(shè)計(jì)一個腳本(shell)程序能實(shí)現(xiàn)增加、刪除、查找和顯示特定用戶信息的功能。三、課程設(shè)計(jì)內(nèi)容在主Shell腳本文件里(必須以 menu 命名)要有一個多操作選項(xiàng)的菜單以便用戶從中選擇。在不同任務(wù)的中,這些操作能自動實(shí)現(xiàn)以下功能:1) 在屏幕上顯示當(dāng)前所有用戶的記錄2) 在屏幕上顯示當(dāng)前所有用戶(經(jīng)過格式化和排序的)的記錄3) 只在屏幕上顯示用戶名和用戶ID4) 只在屏幕上顯示(經(jīng)過格式化和排序的)用戶名和用戶ID5) 查詢并顯示特定用戶的記錄6) 往passwd文件里增加新的用戶記錄7) 從passwd文件里刪除某個用戶記錄在目錄下有四個文件分別為menu,passwd,add,delete其中: menu文件中的程序完成1,2,3,4,5功能;另外寫一個add腳本文件和delete腳本文件分別實(shí)現(xiàn)選項(xiàng)6和7.當(dāng)用戶做了選擇且所選的操作完成之后,可以再次顯示主菜單以供用戶做下一步選擇。用while循環(huán)和case條件語句配合來完成此操作。Q:退出四、總體設(shè)計(jì)4.1部分功能模塊流程圖(1)總體流程圖 圖4-1 總體流程圖(2) 查看指定用戶圖4-2 查看指定用戶(3)添加用戶圖4-3 添加用戶(4)刪除用戶圖4-4 刪除用戶用戶信息主菜單顯示當(dāng)前所有用戶的記錄顯示當(dāng)前所有用戶經(jīng)格式化的記錄顯示用戶名和用戶ID顯示當(dāng)前所有用戶顯示經(jīng)格式化后的用戶名和用戶ID查找指定用戶信息添加用戶信息刪除用戶信息4.2總體功能模塊圖圖4-5 總體功能模塊圖五、詳細(xì)設(shè)計(jì)5.1模塊功能說明 shell編程用戶信息管理系統(tǒng)中,由passwd文件,add.sh,delete.sh,menu.sh三個shell文件組成。 首先編寫passwd文件,在此文件里按照/etc/passwd文件的格式用戶名:密碼:用戶標(biāo)志號:組標(biāo)志號:說明域:用戶家目錄:用戶登錄成功后使用的shell程序?qū)懴略O(shè)置的用戶信息。 add.sh是對用戶信息進(jìn)行增加的shell程序,提示用戶輸入用戶名,如果沒有輸入,則繼續(xù)提示用戶輸入用戶名,如果用戶輸入了則驗(yàn)證用戶名是否符合用戶名的要求,是否以非數(shù)字打頭的字符和數(shù)字組成,如果不符合要求則要求用戶重新輸入,如果符合要求用戶需要繼續(xù)輸入密碼,然后驗(yàn)證密碼和重新輸入密碼兩次輸入密碼是否一致,若一致則需要用戶繼續(xù)輸入用戶UID,組GID,說明域,用戶家目錄,shell路徑,若都成功的話,則把信息重定向追加到passwd文件里。 delete.sh是對用戶進(jìn)行刪除操作的shell程序,首先需要用戶輸入用戶需要刪除的用戶名,然后搜索出此用戶名的信息,進(jìn)行確認(rèn)即可刪除。最后是menu,sh是用戶的主函數(shù),通過輸入不同的值完成不同的功能,包括顯示用戶記錄,格式化記錄,顯示用戶名和ID,格式化顯示用戶名和ID,查詢特定用戶信息,添加新用戶,刪除用戶。5.2系統(tǒng)中shell主要命令說明符號 #!: 用來告訴系統(tǒng)它后面的參數(shù)是用來執(zhí)行該文件的程序。變量: 在shell編程中,所有的變量都由字符串組成,并且不需要對變量進(jìn)行聲明,直接賦值就可以,應(yīng)用變量的話,用$+變量名的形式。管道(|): 將一個命令的輸出作為另外一個命令的輸入。echo :將其命令行參數(shù)中的字符串或變量的值寫到標(biāo)準(zhǔn)輸出設(shè)備,在顯示器上顯示一段文字,一般起到一個提示作用。echo n不換行輸出echo -e后加上起到轉(zhuǎn)義作用重定向:將命令的結(jié)果輸出到文件,而不是標(biāo)準(zhǔn)輸出(屏幕)。:寫入文件并覆蓋舊文件:加到文件的尾部,保留舊文件內(nèi)容。test命令:通常用 來表示條件測試。注意這里的空格很重要。要確保方括號的空格。 -f somefile :判斷是否是一個文件 -n $var :判斷$var變量是否有值 expression -a expression :當(dāng)兩邊的兩個expression 表達(dá)式都為真 -z string :string長度是0 integer1 -eq integer2 :當(dāng)integer1等于integer2 integer1 -ne integer2 :當(dāng)integer1不等于integer2 if 表達(dá)式: 如果條件為真則執(zhí)行then后面的部分:if .; then.elif .; then.else.ficase表達(dá)式:可以用來匹配一個給定的字符串,而不是數(shù)字。case . in.) do something here ;esactr : :把冒號換成空格sort:對制定文件中的行按要求進(jìn)行排序sort -k 1 $dataSource;/按第一個域進(jìn)行排序expr 命令:對表達(dá)式進(jìn)行運(yùn)算expr match$string substring命令在string字符串中匹配substring字符串,然后返回匹配到的substring字符串的長度,若找不到則返回0。expr length $string 求出字符串的長度字符串過濾命令grep:字符串搜索與過濾,顯示所在行的相關(guān)信息。grep -i string1 string2 在string2里查找string1,是大小寫無關(guān)的搜索grep -n $deleteUser $dataSource:顯示查找含有$deleteUser信息,并且在最前面加上行號。catfile.txt:輸出文件內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)上readvar:提示用戶輸入,并將輸入賦值給變量cut:從文件或標(biāo)準(zhǔn)輸入中讀取內(nèi)容,并截取每一行的特定部分,然后將結(jié)果送到標(biāo)準(zhǔn)輸出。-d sep:指定sep作為輸入文件域分隔符,默認(rèn)為Tab。cut不支持用空格隔開的列。cut分隔符只能識別冒號,逗號,句號,tab鍵等非空格作為分隔符的文件或命令執(zhí)行結(jié)果。cut -d “:” -f 1,3 /etc/passwd:用冒號為分隔符,輸出/etc/passwd文件的第1,3列。sed:是流編輯器,對它的輸入流進(jìn)行按指定格式的轉(zhuǎn)換。是一個基本的查找替換程序,可以從標(biāo)準(zhǔn)輸入讀入文本,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出(屏幕)。sed的操作對象:普通文件,數(shù)據(jù)流,一個命令的執(zhí)行結(jié)果。sed -n 2p student.txt:輸出student.txt文件中的第二行sed -e $rowID d $dataSource:刪除含有$rowID的這一行信息awk:字符串列截取功能。默認(rèn)分隔符為白空格??梢杂?F指定分隔符。語法:awk 條件動作 fileawk printf $2 “t” $6 student.txt:輸出student.txt的第2列和第6列。六、調(diào)試與測試6.1調(diào)試方法1、正常輸入shell程序在/root/linlin/1下系統(tǒng)主界面:1、顯示當(dāng)前所有記錄2、格式化顯示當(dāng)前所有用戶信息:3、顯示用戶名和用戶ID4、格式化顯示用戶名和ID5、查詢特定用戶信息:6、添加新用戶7、刪除用戶8、 退出2、特殊輸入1、如果輸入的非17或Q2、如果搜索的用戶不存在,提示出錯信息3、如果刪除的用戶不存在,提示出錯信息6.2測試結(jié)果的分析與討論 在測試中首先要測試各功能是否能夠正常執(zhí)行,是否可以正常顯示系統(tǒng)中用戶信息,是否可以格式化系統(tǒng)中所有用戶信息,顯示和格式化用戶名和ID,查詢特定用戶信息。若輸入的選項(xiàng)系統(tǒng)中不存在,也會提示用戶此選項(xiàng)不是系統(tǒng)提供的功能,如果在passwd文件中沒有所要查詢的用戶的信息,那么會提示此查找的用戶信息不存在。刪除用戶的時(shí)候,刪除的用戶如果不存在,也會提示此用戶不存在。七、設(shè)計(jì)中遇到的問題及解決方法1、開始不太明白shell編程的語法,例如expr的用法,expr match是從字符串的開始匹配,若字符串開始就不匹配,即使中間可以匹配,仍然返回0。3、經(jīng)過對文件測試才知道grep -n $deleteUser $dataSource 此句是輸入要查找的含有$deleteUser的信息,并且在總的信息前會有查找信息在原來文件中的行號。4、sed -e $rowID d $dataSource tempFile; 此句中d表示刪除$rowID行的信息,并且把$dataSource中刪除$rowID后的信息新建的方式重定向輸出到tempFile文件中。2、awk -F : $1 = $userName print $0 $dataSource;此句中的特殊變量$0用于存儲整條記錄的內(nèi)容,而$1表示每條記錄的第一個域。八、源程序清單 (1)Menu.sh文件 #!程序解釋器路徑#! /bin/bash dataSource=passwd;addUsers=./add.sh;deleteUsers=./delete.sh;CheckDataSourceFileExist()if -f -f file判斷文件存在 $dataSource then#文件存在return 0;else#文件不存在clear;echo -n 警告 【$dataSource】 不存在!請確認(rèn)!; read ;return 1;fichoice=F;while $choice != Q -a 當(dāng)兩邊的兩個表達(dá)式都為真時(shí) $choice != q doCheckDataSourceFileExist;if $? $?代表上一個命令執(zhí)行后的推出狀態(tài),0是成功,非0失敗 -ne -ne是不等于 1 then clear;echo 用戶信息管理主菜單;echo =;echo 1.顯示當(dāng)前所有記錄;echo 2.格式化顯示當(dāng)前所有記錄;echo 3.顯示用戶名和用戶ID;echo 4.格式化顯示用戶名和ID;echo 5.查詢特定用戶信息;echo 6.添加新用戶;echo 7.刪除用戶;echo Q.退出;echo -n 你的選擇:;read choice;if -z -z判斷長度是0 $choice thenchoice=empty;ficlear;if $choice = empty ;thenecho 選項(xiàng)尚未選擇!;elsecase $choice in1) CheckDataSourceFileExist;if $? -ne 1 thenecho 當(dāng)前的所有的用戶信息如下所示:;echo 用戶名 密碼 ID GID 說明 工作目錄 登錄Shellcat $dataSource | tr tr 用空格替換: : | more; fi;2) CheckDataSourceFileExist;if $? -ne 1 thenecho 當(dāng)前的所有的用戶信息如下所示:;echo -e -e后加上起到轉(zhuǎn)義作用 用戶名t密碼tIDtGIDt說明t工作目錄t登錄Shell sort -k 1 $dataSource | awk -F : print $1 t $2 t $3 t $4 t $5 t $6 t $7 t | more;fi;3) CheckDataSourceFileExist;if $? -ne 1 thenecho 當(dāng)前的所有的用戶的用戶名和用戶ID如下所示:;echo -e 用戶名,ID;awk -F -F以后面的東西作為分隔符 : print $1 , $3 $dataSource | more; fi;4) CheckDataSourceFileExist;if $? -ne 1 thenecho 當(dāng)前的所有的用戶的用戶名和用戶ID如下所示:;echo -e 用戶名 t ID;awk -F : print $1 t $3 $dataSource | more;fi;5) CheckDataSourceFileExist;if $? -ne 1 thenkeyWords=;while -z $keyWords doecho -n 輸入搜索關(guān)鍵詞:;read keyWords;if -z $keyWords thenecho 搜索關(guān)鍵詞不能為空,請重新輸入;fidoneCheckDataSourceFileExist;if $? -ne 1 thengrep -i Grep i大小寫無關(guān)的搜索 $keyWords $dataSource;if $? -eq 1 thenecho 很遺憾,【$dataSource】文件中,并不存在與 $keyWords 一致的信息。;fififi;6) $addUsers;7) $deleteUsers;Q) printf 程序已經(jīng)退出。;q) printf 程序已經(jīng)退出。;*) echo $choice :此選項(xiàng)不是默認(rèn)提供的功能。請確認(rèn);esacfiecho -n 確認(rèn)?;read ;fiDone(2)add.sh文件#! /bin/bash dataSource=passwd;clear;isContinue=y;userName=;while $isContinue = y -o # 表達(dá)式1或者表達(dá)式2為true $isContinue = Y douserName=;while -z $userName doecho -n 用戶名:;read userName;if -z $userName thenecho 錯誤!用戶名是不能為空的,請重新輸入!;continue;fiif expr match $userName a-zA-Z0-9a-zA-Z* -ne expr length $userName thenecho 錯誤!用戶名的只能由非數(shù)字打頭的字符和數(shù)字組成,請重新輸入!;userName=;continue;fidonepassWord=;passWordAgain=;while -z $passWord doecho -n 密碼:;read passWord;if -z $passWord thenecho 錯誤!密碼是不能為空的,請重新輸入!;continue;fiif expr length $passWord -ne 6 thenecho 密碼長度為6位,請重新輸入!;passWord=;continue;fiif expr match expr match$string substring命令在string字符串中匹配substring字符串,然后返回匹配到的substring字符串的長度,若找不到則返回0 $passWord 0-9a-zA-Z* -ne expr length $passWord thenecho 密碼由大小寫字母、數(shù)字和控制字符組成,請重新輸入!;passWord=;continue;fiecho -n 請?jiān)谳斎胍淮蚊艽a:;read passWordAgain;if $passWordAgain != $passWord thenecho 兩次輸入的密碼不一樣,請重新輸入!;passWord=;continue;fidone#用戶UID輸入處理,UID為數(shù)字、一般非超級用戶的ID大等于500uID=;while -z $uID doecho -n 用戶UID:;read uID;if -z $uID thenecho 錯誤!用戶UID是不能為空的,請重新輸入!;continue;fiif expr match $uID 0-9* -ne expr length expr length $string 求出字符串的長度 $uID thenecho 錯誤!用戶的UID必須為數(shù)字,請重新輸入!;uID=;continue;fiif $uID -lt 500 -o $uID -gt 60000 # thenecho 錯誤!一般非超級用戶的ID范圍為50060000,請重新輸入!;uID=;continue;fidone#用戶組GID處理gID=;while -z $gID doecho -n 用戶組GID:;read gID;if -z $gID thenecho 錯誤!用戶GID是不能為空的,請重新輸入!;continue;fiif expr match $gID 0-9* -ne expr length $gID thenecho 錯誤!用戶的GID必須為數(shù)字,請重新輸入!;gID=;continue;fiif $gID -lt 500 -o $gID -gt 60000 thenecho 錯誤!用戶組的ID范圍為50060000,請重新輸入!;gID=;continue;fidoneecho -n 說明:;read note;#bash,sh,csh,kshshellVersion=;while -z $shellVersion doecho -n 登錄SHELL(bash,sh,csh,ksh):;read shellVersion;if $shellVersion != bash -a $shellVersion != sh -a $shellVersion != csh -a $shellVersion != ksh thenecho 輸入的Shell類型【$shellVersion】不在本系統(tǒng)支持范圍內(nèi),請重新輸入!;shellVersion=;fidoneecho -n 用戶工作目錄:;mkdir /home/$userName;if $? -eq 0 thenecho $userName 成功創(chuàng)建!;fiuserInfo=$userName:$passWord:$uID:$gID:$note:$userName:$shellVersion;echo $userInfo $dataSource;if $? -eq 0 thenecho $userName用戶信息添加成功!;elseecho $userName用戶信息添加失??!;fiecho -n 是否繼續(xù)添加其他用戶?(y/n);read isContinue;done(3)delete.sh文件#! /bin/bash dataSource=passwd;./menu.sh;clear;isContinue=y;userName=;while $isContinue = y -o $isContinue = Y dowhile $isContinue = y -o $isContinue = Y doecho -n 輸入用戶名:;read userName;if -z $userName thenecho 用戶名不能為空,請重新輸入!;isContinue=Y;continue;fiCheckDataSourceFileExist;if $? -ne 1 thendeleteUser=$(awk -F : $1 = $userName print $0 $dataSource); if $deleteUser thenecho 用戶信息為: $deleteUser;echo -n 是否刪除?(y/n);read isContinue;if -z $isContinue thenisContinue=N;fiif $isContinue = y -o $isContinue = Y thenCheckDataSourceFileExist;if $? -ne 1 thenrowID=$(grep grep -n $deleteUser $dataSource:顯示查找含有$deleteUser信息,并且在最前面加上行號。 -n $deleteUser $dataSource | awk -F : print $1); sed sed:是流編輯器,對它的輸入流進(jìn)行按指定格式的轉(zhuǎn)換。是一個基本的查找替換程序,可以從標(biāo)準(zhǔn)輸入讀入文本,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出(屏幕)。sed的操作對象:普通文件,數(shù)據(jù)流,一個命令的執(zhí)行結(jié)果。sed -e $rowID d $

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論