Linux網絡操作系統項目教程(歐拉-麒麟)課件 (含思政)項目7 shell基礎_第1頁
Linux網絡操作系統項目教程(歐拉-麒麟)課件 (含思政)項目7 shell基礎_第2頁
Linux網絡操作系統項目教程(歐拉-麒麟)課件 (含思政)項目7 shell基礎_第3頁
Linux網絡操作系統項目教程(歐拉-麒麟)課件 (含思政)項目7 shell基礎_第4頁
Linux網絡操作系統項目教程(歐拉-麒麟)課件 (含思政)項目7 shell基礎_第5頁
已閱讀5頁,還剩42頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

項目7

shell基礎《Linux網絡操作系統項目教程(歐拉/麒麟)(微課版)(第5版)》“十四五”職業教育國家規劃教材能力要求CAPACITY了解shell的強大功能和shell的命令解釋過程。0103掌握grep的高級用法。02學會使用重定向和管道的方法。04掌握正則表示法。思政導入IDEOLOGY明確職業技術崗位所需的職業規范和精神,樹立社會主義核心價值觀。“高山仰止,景行行止”。為計算機事業做出過巨大貢獻的王選院士,應是青年學生崇拜的對象,也是師生學習和前行的動力。。思政目標IDEOLOGY

“面壁十年圖破壁,難酬蹈海亦英雄”。為中華之崛起而讀書,從來都不僅限于紙上。思政內容IDEOLOGY

王選院士曾經為中國的計算機事業做出過巨大貢獻,并因此獲得國家最高科學技術獎,你知道王選院士嗎?王選院士(1937—2006年)是享譽國內外的著名科學家,漢字激光照排技術創始人,北京大學計算機科學技術研究所主要創建者,歷任副所長、所長,博士生導師。他曾任第十屆全國政協副主席、九三學社副主席、中國科學技術協會副主席、中國科學院院士、中國工程院院士等。思政內容IDEOLOGY王選院士發明的漢字激光照排系統兩次獲國家科技進步一等獎(1987年、1995年),兩次被評為全國十大科技成就(1985年、1995年),并獲國家重大技術裝備成果獎特等獎。王選院士一生榮獲了國家最高科學技術獎、聯合國教科文組織科學獎、陳嘉庚科學獎、美洲中國工程師學會個人成就獎、何梁何利基金科學與技術進步獎等20多項重大成果和榮譽。項目知識準備項目設計與準備項目實施項目實錄:Linux系統安裝與基本配置內容導航CONTENTS一、項目知識準備變量的定義和引用shell支持具有字符串值的變量。shell變量通過賦值語句完成變量說明并予以賦值。在命令行或shell腳本文件中使用$name的形式引用變量name的值。1.變量的定義和引用在shell中,變量的賦值格式如下:name=string其中,name是變量名,它的值就是string,“=”是賦值符號。變量名是以字母或下畫線開頭的字母、數字和下畫線字符序列組成的。一、項目知識準備變量的定義和引用通過在變量名(name)前加$字符(如$name)引用變量的值,引用的結果就是用字符串string代替$name,此過程也稱為變量替換。在定義變量時,若string中包含空格、制表符和換行符,則string必須用'string'或者"string"的形式,即用單(雙)引號將其括起來。雙引號內允許變量替換,而單引號內則不可以。一、項目知識準備變量的定義和引用下面給出一個定義和使用shell變量的例子。//顯示字符常量[root@Server01~]#echowhoareyouwhoareyou[root@Server01~]#echo'whoareyou'whoareyou[root@Server01~]#echo"whoareyou"whoareyou[root@Server01~]#//由于要輸出的字符串中沒有特殊字符,所以''和""的效果是一樣的,不用""但相當于使用了""[root@Server01~]#echoJet'aime>//由于要使用特殊字符('),//'不匹配,shell認為命令行沒有結束,回車后會出現系統第二提示符,//讓用戶繼續輸入命令行,按“Ctrl+C”組合鍵結束[root@Server01~]#//為了解決這個問題,可以使用下面的兩種方法[root@Server01~]#echo"Jet'aime"Jet’aime[root@Server01~]#echoJet\'aime一、項目知識準備shell變量的作用域與程序設計語言中的變量一樣,shell變量有其規定的作用范圍。shell變量分為局部變量和全局變量。局部變量的作用范圍僅限制在其命令行所在的shell或shell腳本文件中。全局變量的作用范圍則包括本shell進程及其所有子進程。可以使用export內置命令將局部變量設置為全局變量。下面給出一個shell變量作用域的例子。//在當前shell中定義變量var1[root@Server01~]#var1=Linux//在當前shell中定義變量var2并將其輸出[root@Server01~]#var2=unix[root@Server01~]#exportvar2//引用變量的值[root@Server01~]#echo$var1Linux[root@Server01~]#echo$var2unix一、項目知識準備shell變量的作用域//顯示當前shell的PID[root@Server01~]#echo$$2670[root@Server01~]#//調用子shell[root@Server01~]#bash//顯示當前shell的PID[root@Server01~]#echo$$2709//由于var1沒有被輸出,所以在子shell中已無值[root@Server01~]#echo$var1//由于var2被輸出,所以在子shell中仍有值[root@Server01~]#echo$var2unix//返回主shell,并顯示變量的值[root@Server01~]#exit[root@Server01~]#echo$$2670[root@Server01~]#echo$var1Linux[root@Server01~]#echo$var2unix一、項目知識準備環境變量環境變量是指由shell定義和賦初值的shell變量。shell用環境變量來確定查找路徑、注冊目錄、終端類型、終端名稱、用戶名等。所有環境變量都是全局變量,并可以由用戶重新設置。不同類型的shell的環境變量有不同的設置方法。在bash中,設置環境變量用set命令,命令的格式是:set環境變量=變量的值例如,設置用戶的主目錄為/home/john,可以用以下命令:[root@Server01~]#setHOME=/home/john一、項目知識準備環境變量不加任何參數直接使用set命令可以顯示出用戶當前所有環境變量的設置,如下所示:[root@Server01~]#setBASH=/bin/bashBASH_ENV=/root/.bashrc(略)

#路徑PATH的設置PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11PS1='[\u@\h\W]\$'PS2='>'SHELL=/bin/bash可以看到其中路徑PATH的設置為(使用“set|grepPATH=”命令過濾需要的內容):PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin總共有5個目錄,bash會在這些目錄中依次搜索用戶輸入的命令的可執行文件。在環境變量前面加上$符號,表示引用環境變量的值,例如:[root@Server01~]#cd$HOME上述命令將把目錄切換到用戶的主目錄。當修改PATH變量時,例如,將一個路徑/tmp加到PATH變量前,應設置為:[root@Server01~]#PATH=/tmp:$PATH一、項目知識準備環境變量shell環境依賴于多個文件的設置。環境設置文件有兩種,一種是系統環境設置文件,另一種是個人環境設置文件。(1)系統中的用戶環境設置文件。登錄環境設置文件:/etc/profile。(2)用戶設置的環境設置文件。登錄環境設置文件:$HOME/.bash_profile。非登錄環境設置文件:$HOME/.bashrc。一、項目知識準備工作環境設置文件項目知識準備項目設計與準備項目實施項目實錄:Linux系統安裝與基本配置內容導航CONTENTS二、項目設計與準備項目設計與準備本項目要用到Server01,完成的任務如下。(1)理解命令運行的判斷依據(2)掌握grep的高級用法(3)掌握正則表示法(4)學會使用重定向和管道命令項目知識準備項目設計與準備項目實施項目實錄:Linux系統安裝與基本配置內容導航CONTENTS三、項目實施任務7-1命令運行的判斷依據:;、&&、||Server01的IP地址為192.168.10.1/24,計算機的網絡連接方式是僅主機模式(VMnet1)。在某些情況下,若想使多條命令一次輸入而順序執行,該如何辦呢?1.cmd;cmd例如在關機的時候希望可以先運行兩次sync同步化寫入磁盤后才關機,那么怎么操作呢?[root@Server01~]#sync;sync;shutdown-hnow在命令與命令中間利用分號(;)來隔開,這樣一來,分號前的命令運行完后就會立刻接著運行后面的命令。三、項目實施任務7-1命令運行的判斷依據:;、&&、||2.$?(命令回傳值)與“&&”或“||”。“&&”及“||”命令的執行情況說明如下表:命令執行情況說

明cmd1&&cmd2若cmd1運行完畢且正確運行($?=0),則開始運行cmd2;若cmd1運行完畢且為錯誤($?≠0),則cmd2不運行cmd1||cmd2若cmd1運行完畢且正確運行($?=0),則cmd2不運行;若cmd1運行完畢且為錯誤($?≠0),則開始運行cmd2三、項目實施任務7-1命令運行的判斷依據:;、&&、||實例說明:要求在某個目錄下面創建一個文件。如果該目錄存在的話,直接創建這個文件;如果不存在,就不進行創建操作。【例7-1】使用ls查閱目錄/tmp/abc是否存在,若存在,則用touch創建/tmp/abc/hehe。[root@Server01~]#ls/tmp/abc&&touch/tmp/abc/hehels:無法訪問'/tmp/abc':沒有那個文件或目錄#說明找不到該目錄,但并沒有touch的錯誤,表示touch并沒有運行[root@Server01~]#mkdir/tmp/abc[root@Server01~]#ls/tmp/abc&&touch/tmp/abc/hehe[root@Server01~]#ll/tmp/abctotal0-rw-r--r--.1rootroot0Jul1422:34hehe三、項目實施任務7-1命令運行的判斷依據:;、&&、||上面的例子中,我們還必須手動自行創建目錄,很麻煩。能不能自動判斷:沒有該目錄就創建呢?【例7-2】測試/tmp/abc是否存在,若不存在,則予以創建;若存在,就不做任何事情。[root@Server01~]#rm-r/tmp/abc<==先刪除此目錄以方便測試[root@Server01~]#ls/tmp/abc||mkdir/tmp/abcls:無法訪問'/tmp/abc':沒有那個文件或目錄[root@Server01~]#ll/tmp/abcTotal0<==結果出現了,能訪問到該目錄,不報錯,說明運行了mkdir命令三、項目實施任務7-1命令運行的判斷依據:;、&&、||【例7-3】如果不管/tmp/abc存在與否,都要創建/tmp/abc/hehe文件,怎么辦呢?

[root@Server01~]#ls/tmp/abc||mkdir/tmp/abc&&touch/tmp/abc/hehe分析:若/tmp/abc不存在。回傳$?≠0;因為||遇到不為0的$?,故開始執行mkdir/tmp/abc,由于mkdir/tmp/abc會成功執行,所以回傳$?=0;因為&&遇到$?=0,故會執行touch/tmp/abc/hehe,最終hehe就被創建了。若/tmp/abc存在。回傳$?=0;因為||遇到$?=0不會執行,此時$?=0繼續向后傳;而&&遇到$?=0就開始創建/tmp/abc/hehe,所以最終/tmp/abc/hehe被創建。流程圖如下:三、項目實施任務7-1命令運行的判斷依據:;、&&、||【例7-4】以ls測試/tmp/bobbying是否存在:若存在,則顯示“exist”;若不存在,則顯示“notexist”。ls/tmp/bobbying&&echo"exist"||echo"notexist"意思是說,在ls/tmp/bobbying運行后,若正確,就運行echo"exist",若有問題,就運行echo"notexist"。那如果寫成如下的方式又會如何呢?三、項目實施任務7-2掌握grep的高級使用grep是shell中處理字符很方便的命令,其命令格式如下。格式:grep[-A][-B][--color=auto]'查找字符串'filename選項與參數的含義如下。-A:后面可加數字,為after的意思,除了列出該行外,后續的n行也列出來。-B:后面可加數字,為befor的意思,除了列出該行外,前面的n行也列出來。三、項目實施任務7-2掌握grep的高級使用【例7-5】用dmesg列出核心信息,再以grep找出內含IPv6的那行。[root@Server01~]#dmesg|grep'IPv6'[1.228032]SegmentRoutingwithIPv6[13.707603]IPv6:ADDRCONF(NETDEV_UP):ens160:linkisnotready#dmesg可列出核心信息,通過grep獲取IPv6的相關信息。三、項目實施任務7-2掌握grep的高級使用【例7-6】承上題,要將獲取到的關鍵字顯色,且加上行號(-n)來表示。[root@Server01~]#dmesg|grep-n--color=auto'IPv6'1265:[1.228032]SegmentRoutingwithIPv61531:[13.707603]IPv6:ADDRCONF(NETDEV_UP):ens160:linkisnotready#除了會有特殊顏色外,最前面還有行號三、項目實施任務7-2掌握grep的高級使用【例7-7】承上題,在關鍵字所在行的前一行與后一行也一起找出來顯示。[root@Server01~]#dmesg|grep-n-A1-B1--color=auto'IPv6'1264-[1.227794]NET:Registeredprotocolfamily101265:[1.228032]SegmentRoutingwithIPv61266-[1.228032]NET:Registeredprotocolfamily17--1530-[9.349047]random:7urandomwarning(s)missedduetoratelimiting1531:[13.707603]IPv6:ADDRCONF(NETDEV_UP):ens160:linkisnotready1532-[13.761952]vmxnet30000:03:00.0ens160:intrtype3,mode0,2v#如上所示,你會發現關鍵字1265所在的前后各1行及1531前后各1行也都被顯示出來#這樣可以讓你將關鍵字前后數據找出來進行分析三、項目實施任務7-3練習基礎正則表達式說明:練習文件sample.txt的內容。文件共有22行,最底下一行為空白行。1.查找特定字符串。假設我們要從文件sample.txt當中取得“the”這個特定字符串,最簡單的方式是:[root@Server01~]#grep-n'the'/root/sample.txt8:Ican'tfinishthetest.12:thesymbol'*'isrepresentedasstart.15:Youarethebestismeanyouaretheno.1.16:Theworld<Happy>isthesamewith"glad".18:googleisthebesttoolsforsearchkeyword.如果想要反向選擇呢?也就是說,當該行沒有“the”這個字符串時才顯示在屏幕上:[root@Server01~]#grep-vn'the'/root/sample.txt三、項目實施任務7-3練習基礎正則表達式如果你想要獲得不論大小寫的“the”這個字符串,則執行[root@Server01~]#grep-in'the'/root/sample.txt8:Ican'tfinishthetest.9:Oh!Thesouptastegood.12:thesymbol'*'isrepresentedasstart.14:Thegdsoftwareisalibraryfordraftingprograms.15:Youarethebestismeanyouaretheno.1.16:Theworld<Happy>isthesamewith"glad".18:googleisthebesttoolsforsearchkeyword.三、項目實施任務7-3練習基礎正則表達式2.利用中括號[]來搜尋集合字符。對比“test”或“taste”這兩個單詞可以發現,它們有共同點“t?st”存在。這個時候,可以這樣來查尋:[root@Server01~]#grep-n't[ae]st'/root/sample.txt8:Ican'tfinishthetest.9:Oh!Thesouptastegood.其實[]里面不論有幾個字符,都只代表某一個字符,所以,上面的例子說明需要的字符串是tast或test。三、項目實施任務7-3練習基礎正則表達式而如果想要搜尋到有“oo”的字符時,則使用:[root@Server01~]#grep-n'oo'/root/sample.txt1:"OpenSource"isagoodmechanismtodevelopprograms.2:appleismyfavoritefood.3:Footballgameisnotusefeetonly.9:Oh!Thesouptastegood.18:googleisthebesttoolsforsearchkeyword.19:goooooogleyes!三、項目實施任務7-3練習基礎正則表達式如果不想要“oo”前面有“g”的行顯示出來。此時,可以利用在集合字節的反向選擇[^]來完成:[root@Server01~]#grep-n'[^g]oo'/root/sample.txt2:appleismyfavoritefood.3:Footballgameisnotusefeetonly.18:googleisthebesttoolsforsearchkeyword.19:goooooogleyes!三、項目實施任務7-3練習基礎正則表達式例如大寫英文/小寫英文/數字等,就可以使用[a-z],[A-Z],[0-9]等方式來書寫。假設oo前面不想有小寫字母,則:[root@Server01~]#grep-n'[^a-z]oo'sample.txt3:Footballgameisnotusefeetonly.獲取有數字的那一行:[root@Server01~]#grep-n'[0-9]'/root/sample.txt5:However,thisdressisabout$3183dollars.15:Youarethebestismeanyouaretheno.1.三、項目實施任務7-3練習基礎正則表達式3.行首與行尾字節^$。查詢到行首是字符串“the”:[root@Server01~]#grep-n'^the'/root/sample.txt12:thesymbol'*'isrepresentedasstart.想要開頭是小寫字母的那些行列出:[root@Server01~]#grep-n'^[a-z]'/root/sample.txt如果不想要開頭是英文字母,則可以這樣:[root@Server01~]#grep-n'^[^a-zA-Z]'/root/sample.txt1:"OpenSource"isagoodmechanismtodevelopprograms.21:#IamBobby三、項目實施任務7-3練習基礎正則表達式如果想要找出行尾結束為小數點(.)的那些行。[root@Server01~]#grep-n'\.$'/root/sample.txt如果想要找出哪一行是空白行,即該行沒有輸入任何數據。[root@Server01~]#grep-n'^$'/root/sample.txt22:因為只有行首跟行尾有(^$),所以這樣就可以找出空白行了。三、項目實施任務7-3練習基礎正則表達式4.任意一個字符“.”與重復字節“*”。.(小數點):代表一個任意字符。*(星號):代表重復前一個字符0次到無窮多次假設需要找出“g??d”的字符串,即共有4個字符,開頭是“g”而結束是“d”?[root@Server01~]#grep-n'g..d'/root/sample.txt1:"OpenSource"isagoodmechanismtodevelopprograms.9:Oh!Thesouptastegood.16:Theworld<Happy>isthesamewith"glad".三、項目實施任務7-3練習基礎正則表達式當需要“至少兩個o以上的字符串”時,就需要ooo*,即[root@Server01~]#grep-n'ooo*'/root/sample.txt如果想要字符串開頭與結尾都是g,但是兩個g之間僅能存在至少一個o。[root@Server01~]#grep-n‘goo*g'sample.txt如果想要找出以g開頭且以g結尾的字符串,當中的字節可有可無,那該如何操作呢?[root@Server01~]#grep-n'g.*g'/root/sample.txt如果想要找出“任意數字”的行列呢?[root@Server01~]#grep-n'[0-9][0-9]*'/root/sample.txt三、項目實施任務7-3練習基礎正則表達式5.限定連續RE字符范圍{}“{}”:限定范圍的字符。但因為“{”與“}”的符號在shell里是有特殊意義的,所以必須使用轉義字符“\”來讓其失去特殊意義才行。假設要找到含兩個o的字符串的行:[root@Server01~]#grep-n'o\{2\}'/root/sample.txt假設要找出g后面接2~5個o,然后再接一個g的字符串:[root@Server01~]#grep-n'go\{2,5\}g'/root/sample.txt如果想要的是2個o以上的goooo....g呢?[root@Server01~]#grep-n'go\{2,\}g'/root/sample.txt三、項目實施任務7-4基礎正則表達式的特殊字符匯總基礎正則表示的特殊字符匯總成表如下:三、項目實施任務7-4基礎正則表達式的特殊字符匯總基礎正則表示的特殊字符匯總成表(續)如下:重定向符說

明<

實現輸入重定向。輸入重定向并不經常使用,因為大多數命令都以參數的形式在命令行上指定輸入文件的文件名。盡管如此,當使用一個不接受文件名為輸入參數的命令,而需要的輸入又是在一個已存在的文件中時,就能用輸入重定向解決問題>或>>實現輸出重定向。輸出重定向比輸入重定向更常用。輸出重定向使用戶能把一個命令的輸出重定向到一個文件中,而不是顯示在屏幕上。很多情況下都可以使用這種功能。例如,如果某個命令的輸出很多,在屏幕上不能完全顯示,即可把它重定向到一個文件中,稍后再用文本編輯器來打開這個文件2>或2>>實現錯誤重定向&>同時實現輸出重定向和錯誤重定向三、項目實施任務7-5使用重定向重定向就是不使用系統的標準輸入端口、標準輸出端口或標準錯誤端口,而進行重新的指定,所以重定向分為輸入重定向、輸出重定向和錯誤重定向。通常情況下,重定向到一個文件。在shell中,要實現重定向主要依靠重定向符,即shell是檢查命令行中有無重定向符來決定是否需要實施重定向。重定向符如下表:三、項目實施任務7-5使用重定向下面舉幾個使用重定向的例子。(1)將ls命令生成的/tmp目錄的一個清單存到當前目錄中的dir文件中。[root@Server01~]#ls-l/tmp>dir(2)將ls命令生成的/etc目錄的一個清單以追加的方式存到當前目錄中的dir文件中。[root@Server01~]#ls-l/etc>>dir(3)passwd文件的內容作為wc命令的輸入(wc命令用來計算數字,可以計算文件的Byte數、字數或是列數,若不指定文件名稱,或是所給予的文件名為“-”,則wc指令會從標準輸入設備讀取數據)。[root@Server01~]#wc</etc/passwd(4)將命令myprogram的錯誤信息保存在當前目錄下的err_file文件中。[root@Server01~]#myprogram2>err_file(5)將命令myprogram的輸出信息和錯誤信息保存在當前目錄下的output_file文件中。[root@Server01~]#myprogram&>output_file(6)將命令ls的錯誤信息保存在當前目錄下

溫馨提示

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

評論

0/150

提交評論