《網(wǎng)絡(luò)操作系統(tǒng)》課件-第四部分-vim編輯器與shell_第1頁(yè)
《網(wǎng)絡(luò)操作系統(tǒng)》課件-第四部分-vim編輯器與shell_第2頁(yè)
《網(wǎng)絡(luò)操作系統(tǒng)》課件-第四部分-vim編輯器與shell_第3頁(yè)
《網(wǎng)絡(luò)操作系統(tǒng)》課件-第四部分-vim編輯器與shell_第4頁(yè)
《網(wǎng)絡(luò)操作系統(tǒng)》課件-第四部分-vim編輯器與shell_第5頁(yè)
已閱讀5頁(yè),還剩73頁(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)介

Linux操作系統(tǒng)管理

——以CentOS7為例

四、vim編輯器與shell4.1?Vim文本編輯器基礎(chǔ)知識(shí)4.1?Vim文本編輯器基礎(chǔ)知識(shí)4.1.1?Vim文本編輯器的三種工作模式1.編輯(一般)模式當(dāng)用Vim打開(kāi)一個(gè)文件時(shí)就直接進(jìn)入一般編輯模式了,該模式中等待輸入編輯命令輸入而不是文本輸入,該模式為默認(rèn)的模式,也稱(chēng)為一般模式或普通模式。2.插入(輸入)模式在一般指令模式中可以進(jìn)行刪除、復(fù)制、粘貼等操作,但是無(wú)法編輯文件中的內(nèi)容。只有當(dāng)你按下“i、I、o、O、a、A、r、R”等任何一個(gè)字母之后才能進(jìn)入編輯模式。3.命令(末行)模式在一般命令模式時(shí),輸入“:/?”三個(gè)中的任何一個(gè)按鍵,就可以將光標(biāo)移動(dòng)到最底下那一列。在這個(gè)模式當(dāng)中,可以給你提供“搜尋資料”的動(dòng)作,而讀取、存盤(pán)、大量取代字符、離開(kāi)Vim、顯示行號(hào)等的動(dòng)作都是在此模式中達(dá)成的。4.1?Vim文本編輯器基礎(chǔ)知識(shí)Linux系統(tǒng)中對(duì)于字母的大小寫(xiě)是非常敏感的,如果想讓Vim搜索字符串過(guò)程中忽略大小寫(xiě),可以輸入“:setignorecase”指令。設(shè)置該命令之后,意味著搜索/Today和/today是沒(méi)有任何區(qū)別的。如果要重新開(kāi)啟大小寫(xiě)敏感,只要使用下面這條命令即可。:setnoignorecase#開(kāi)啟大小寫(xiě)敏感:setignorecase#忽略大小寫(xiě)4.1?Vim文本編輯器基礎(chǔ)知識(shí)簡(jiǎn)單地說(shuō),我們可以將這三個(gè)模式之間的關(guān)系表示4.1?Vim文本編輯器基礎(chǔ)知識(shí)4.1.2?Vim的基本使用1.首先,要編輯一個(gè)文件,可以在終端命令行下輸入Vimfile。如果file不存在,那么Vim會(huì)自動(dòng)新建一個(gè)名為file的文件。如果使用不帶任何參數(shù)的Vim命令,那么就需要在保存的時(shí)候指定文件名。同時(shí),Vim會(huì)認(rèn)為這個(gè)人應(yīng)該是第一次使用這個(gè)軟件,從而給出一些版本和幫助信息,如圖6-2所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)2.進(jìn)入命令終端,如圖所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)3.在命令行中輸入“Vimwelcome.txt”,便可新建Vimwelcome.txt文檔,如圖6-4所示。直接輸入“Vim文檔名”便能進(jìn)入Vim的一般指令模式。4.1?Vim文本編輯器基礎(chǔ)知識(shí)4.敲入【Enter】鍵進(jìn)入文檔中,如圖所示,屬于編輯模式。整個(gè)Vim界面主要分為兩部分,上半部分顯示的是文件的實(shí)際內(nèi)容,最底下一列則是狀態(tài)顯示列(如下圖的[NewFile]信息),或者是命令下達(dá)列。4.1?Vim文本編輯器基礎(chǔ)知識(shí)5.輸入a,進(jìn)入插入模式,在Vim文本編輯器的左下角出現(xiàn)“--INSERT--”,表明當(dāng)前狀態(tài)可以進(jìn)行正常編輯工作,除了鍵盤(pán)上的【ESC】,因?yàn)橹灰丛撴I便會(huì)切回“編輯模式”,如下圖所示(在一般指令模式之中,只要按下i、o、a等字符就可進(jìn)入插入模式)。4.1?Vim文本編輯器基礎(chǔ)知識(shí)4.編輯文檔,比如:輸入一行文字,“Hello,Vim!”,如圖所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)7.接著,敲入【Esc】鍵,切換到“編輯模式”,如圖所示,左下角的提示“--INSERT--”消失不見(jiàn)。4.1?Vim文本編輯器基礎(chǔ)知識(shí)8.存檔離開(kāi):敲入“:”進(jìn)入命令(末行)模式,輸入wq保存文檔并退出Vim(注意,按下“:”時(shí),光標(biāo)就會(huì)移動(dòng)到最底下一列),如圖所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)9.最后查看文檔“welcome.txt”,輸入“catwelcome.txt”,結(jié)果如圖所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)4.1.3?Vim的常用命令“一般(編輯)模式”中常用的快捷鍵,主要分為三大類(lèi):光標(biāo)移動(dòng)、復(fù)制、粘貼及刪除等命令以及文字搜索和替換等命令;具體命令詳細(xì)說(shuō)明如表6-1、表6-2、表6-3所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)4.1.3?Vim的常用命令編輯模式”中常用的快捷鍵,主要分為三大類(lèi):光標(biāo)移動(dòng)、復(fù)制、粘貼及刪除等命令以及文字搜索和替換等命令;具體命令詳細(xì)說(shuō)明如表6-1、表6-2、表6-3所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)4.1.3?Vim的常用命令“編輯模式”中常用的快捷鍵,主要分為三大類(lèi):光標(biāo)移動(dòng)、復(fù)制、粘貼及刪除等命令以及文字搜索和替換等命令;具體命令詳細(xì)說(shuō)明如表6-1、表6-2、表6-3所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)“編輯模式”切換到“插入模式”中常用的快捷鍵,具體命令如表6-4所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)“命令模式”中常用的快捷鍵,主要是有關(guān)文檔的存儲(chǔ)、離開(kāi)以及Vim環(huán)境更改等命令;具體命令的詳細(xì)說(shuō)明如表6-5、表6-6所示。4.1?Vim文本編輯器基礎(chǔ)知識(shí)“指令列命令模式”中常用的快捷鍵,主要是有關(guān)文檔的存儲(chǔ)、離開(kāi)以及Vim環(huán)境更改等命令;具體命令的詳細(xì)說(shuō)明如表6-5、表6-6所示。4.2?重定向、管道和環(huán)境變量4.2?重定向、管道和環(huán)境變量4.2.1?輸入輸出重定向首先我們需要了解文件描述符,文件描述符在形式上是一個(gè)非負(fù)整數(shù)。實(shí)際上,它是一個(gè)索引值,指向內(nèi)核為每一個(gè)進(jìn)程所維護(hù)的該進(jìn)程打開(kāi)文件的記錄表。當(dāng)程序打開(kāi)一個(gè)現(xiàn)有文件或者創(chuàng)建一個(gè)新文件時(shí),內(nèi)核向進(jìn)程返回一個(gè)文件描述符。在程序設(shè)計(jì)中,一些涉及底層的程序編寫(xiě)往往會(huì)圍繞著文件描述符展開(kāi)。但是文件描述符這一概念往往只適用于UNIX、Linux這樣的操作系統(tǒng)。習(xí)慣上,標(biāo)準(zhǔn)輸入(STDIN,standardinput)的文件描述符是0,標(biāo)準(zhǔn)輸出(STDOUT,standardoutput)是1,標(biāo)準(zhǔn)錯(cuò)誤(STDERR,standarderror)是2。盡管這種習(xí)慣并非Unix內(nèi)核的特性,但是因?yàn)橐恍﹕hell和很多應(yīng)用程序都使用這種習(xí)慣,因此,如果內(nèi)核不遵循這種習(xí)慣的話,很多應(yīng)用程序?qū)⒉荒苁褂谩?.2?重定向、管道和環(huán)境變量所謂重定向,就是不使用系統(tǒng)的標(biāo)準(zhǔn)輸入端口、標(biāo)準(zhǔn)輸出端口或標(biāo)準(zhǔn)錯(cuò)誤端口,而進(jìn)行重新的指定,所以重定向分為輸入重定向、輸出重定向和錯(cuò)誤重定向在Shell中,要實(shí)現(xiàn)重定向主要依靠重定向符實(shí)現(xiàn),下表列出了常用的重定向符4.2?重定向、管道和環(huán)境變量①將ls命令生成的/tmp目錄的一個(gè)清單存到當(dāng)前目錄中的dir文件中。$ls–l/tmp>dir②將ls命令生成的/tmp目錄的一個(gè)清單以追加的方式存到當(dāng)前目錄中的dir文件中。$ls–l/tmp>>dir③將passwd文件的內(nèi)容作為wc命令的輸入。$wc</etc/passwd④將命令myprogram的錯(cuò)誤信息保存在當(dāng)前目錄下的err_file文件中。$myprogram2>err_file⑤將命令myprogram的輸出信息和錯(cuò)誤信息保存在當(dāng)前目錄下的output_file文件中。$myprogram&>output_file⑥將命令ls的錯(cuò)誤信息保存在當(dāng)前目錄下的err_file文件中。$ls–l2>err_file2>/dev/null輸入輸出重定向舉例4.2?重定向、管道和環(huán)境變量4.2.2?管道命令許多Linux命令具有過(guò)濾特性,即一條命令通過(guò)標(biāo)準(zhǔn)輸入端口接收一個(gè)文件中的數(shù)據(jù),命令執(zhí)行后產(chǎn)生的結(jié)果數(shù)據(jù)又通過(guò)標(biāo)準(zhǔn)輸出端口送給后一條命令,作為該命令的輸入數(shù)據(jù)。Shell提供管道命令“|”將這些命令前后銜接在一起,形成一個(gè)管道線。格式為:命令1|命令2|……|命令n管道線中的每一條命令都作為一個(gè)單獨(dú)的進(jìn)程運(yùn)行,每一條命令的輸出作為下一條命令的輸入。由于管道線中的命令總是從左到右順序執(zhí)行的,因此管道線是單向的。4.2?重定向、管道和環(huán)境變量管道舉例以長(zhǎng)格式遞歸的方式分屏顯示/etc目錄下的文件和目錄列表。4.2?重定向、管道和環(huán)境變量管道舉例②分屏顯示文本文件/etc/passwd的內(nèi)容。$cat/etc/passwd|more③統(tǒng)計(jì)文本文件/etc/passwd的行數(shù)、字?jǐn)?shù)和字符數(shù)。$cat/etc/passwd|wc④查看是否存在john用戶(hù)賬號(hào)。$cat/etc/passwd|grepjohn⑤查看系統(tǒng)是否安裝了apache軟件包。$rpm–qa|grepapache⑥顯示文本文件中的若干行。$tail-n+15myfile|head-n34.2?重定向、管道和環(huán)境變量4.2.3?命令行通配符在Linux系統(tǒng)中,當(dāng)我們相對(duì)一類(lèi)文件批量操作時(shí),例如批量查看硬盤(pán)文件屬性,或者是對(duì)某個(gè)文件進(jìn)行修改,但是一時(shí)想不起文件的全程時(shí)等情況,我們便可以使用通配符來(lái)搞定所有的匹配情況。那么,在Linux系統(tǒng)中默認(rèn)的Bash解釋器中支持多種文本通配符,具體通配符的含義如所示。4.2?重定向、管道和環(huán)境變量Bash解釋器還支持很多的特殊字符擴(kuò)展,以下字符是非常有用的,希望能認(rèn)真理解和掌握它們的用法,具體內(nèi)容如表所示。4.2?重定向、管道和環(huán)境變量4.2.4?變量與環(huán)境變量1.變量變量在Bash環(huán)境中是非常重要的組成,接下來(lái)我們將介紹重要的環(huán)境變量、變量的取用與設(shè)定等內(nèi)容。那么什么是變量呢?舉例來(lái)說(shuō):n=m+2,即在等號(hào)的左邊n就是變量,在等號(hào)右邊的m+2就是變量的值或內(nèi)容。簡(jiǎn)單來(lái)說(shuō),變量是計(jì)算機(jī)系統(tǒng)用于保存可變值的數(shù)據(jù)類(lèi)型,我們可以直接通過(guò)變量名來(lái)提取到對(duì)應(yīng)的變量值。變量是由固定的變量名與用戶(hù)或系統(tǒng)設(shè)置的變量值兩部分組成,如果需要可直接修改。在Shell中,使用變量之前通常并不需要事先為它們聲明;當(dāng)給變量賦值時(shí),只需要使用變量名即可,該變量會(huì)根據(jù)需要被自動(dòng)創(chuàng)建;當(dāng)訪問(wèn)變量中所存儲(chǔ)的內(nèi)容則必須在變量名前加一個(gè)$符號(hào)。4.2?重定向、管道和環(huán)境變量2.環(huán)境變量在Linux系統(tǒng)中,環(huán)境變量是用來(lái)定義系統(tǒng)運(yùn)行環(huán)境的一些參數(shù),比較常用的環(huán)境變量及作用如下表所述。注意,Linux系統(tǒng)中的環(huán)境變量的名稱(chēng)都是用大寫(xiě)字母表示,這是一種約定俗成的規(guī)定。Linux常見(jiàn)環(huán)境變量及對(duì)應(yīng)作用如下表所示。4.3?Shell程序設(shè)計(jì)4.3?Shell程序設(shè)計(jì)4.3.0?Shell簡(jiǎn)介Shell是一個(gè)程序,它在用戶(hù)和操作系統(tǒng)之間提供了一個(gè)面向行的可交互接口。用戶(hù)在命令行中輸入命令,運(yùn)行在后臺(tái)的Shell把命令轉(zhuǎn)換成指令代碼發(fā)送給操作系統(tǒng)。Shell提供了很多高級(jí)特性,使得用戶(hù)和操作系統(tǒng)間的交互變得簡(jiǎn)單和高效。目前,在Linux環(huán)境下有幾種不同類(lèi)型的shell,常用的有BourneAgainShell(BASH)、TCSHShell、Z-Shell等。不同的Shell提供不盡相同的語(yǔ)法和特性,用戶(hù)可以使用任何一種Shell。在Linus上,BASHshell是默認(rèn)安裝和使用的Shell。4.3?Shell程序設(shè)計(jì)我們學(xué)習(xí)Linux命令,大致都是屬于交互式;Shell腳本是將各種命令通過(guò)邏輯語(yǔ)句組合而成的程序。Shell腳本需要用到很多的Linux命令,結(jié)合正則表達(dá)法、管道命令以及數(shù)據(jù)流重定向等語(yǔ)法規(guī)則來(lái)完成指定任務(wù)。查看系統(tǒng)中所有可用的Shell解釋器。所示的命令如圖所示。查看當(dāng)前使用的Shell解釋器,輸入如圖所示的命令:4.3?Shell程序設(shè)計(jì)4.3.1?Shell腳本的基本語(yǔ)法結(jié)構(gòu)Shell腳本的編寫(xiě)使用Vim文本編輯器,按照命令的執(zhí)行順利依次編寫(xiě),每行寫(xiě)一條了Linux命令,并且一個(gè)完整的Shell腳本應(yīng)該包含“腳本聲明(首行)”“注釋信息”和“可執(zhí)行語(yǔ)句(內(nèi)容)”。腳本聲明(首行):使用#!表示,用于告知系統(tǒng)用何種Shell來(lái)解釋?zhuān)蛔⑨屝畔ⅲ菏褂?表示,用于對(duì)可執(zhí)行語(yǔ)句或程序功能做解釋說(shuō)明,不強(qiáng)制;可執(zhí)行語(yǔ)句(內(nèi)容):是指需執(zhí)行的具體命令。先來(lái)寫(xiě)一個(gè)簡(jiǎn)單的Shell腳本,功能是顯示當(dāng)前的工作路徑并列出當(dāng)前目錄下的所有文件與屬性。4.3?Shell程序設(shè)計(jì)Shell腳本如下所示:#代碼區(qū):#在終端命令行,輸入以下命令,創(chuàng)建hello.sh基本文件#vi

hello.sh#進(jìn)入sh腳本編輯區(qū),輸入以下腳本程序#!/bin/bash#thisismyfirstshellproecho“HelloWorld”4.3?Shell程序設(shè)計(jì)設(shè)置Shell腳本權(quán)限一般情況下,創(chuàng)建的腳本是沒(méi)有執(zhí)行權(quán)限的,沒(méi)有執(zhí)行權(quán)限則不能直接執(zhí)行,需要賦予其可執(zhí)行權(quán)限,方可執(zhí)行。#chmodu+xhello.sh#./hello.sh4.3?Shell程序設(shè)計(jì)執(zhí)行Shell腳本的方式可以采用三種:輸入腳本的絕對(duì)路徑或相對(duì)路徑$/home/test/hello.sh$./hello.sh執(zhí)行bash或sh+腳本$bash/home/test/hello.sh$sh./hello.sh當(dāng)腳本沒(méi)有執(zhí)行權(quán)限時(shí),root用戶(hù)和文件所有者也可通過(guò)該方式執(zhí)行。在腳本的路徑前加“.”或source$

source/home/test/hello.sh$../hello.sh當(dāng)腳本沒(méi)有執(zhí)行權(quán)限時(shí),root用戶(hù)和文件所有者也可通過(guò)該方式執(zhí)行。區(qū)別:第一種和第二種方式會(huì)新打開(kāi)一個(gè)bash,但不同bash中的變量無(wú)法共享。第三種方式則是在同一個(gè)shell里執(zhí)行。4.3?Shell程序設(shè)計(jì)4.3.2?Shell變量A.變量的設(shè)置規(guī)則:1.變量名稱(chēng)只能是字母、數(shù)字和下劃線組成,但是開(kāi)頭字符不能是數(shù)字,環(huán)境變量名稱(chēng)一般用大寫(xiě)字母,便于區(qū)分;2.在bash中,變量的默認(rèn)類(lèi)型都是字符串型,如果要進(jìn)行數(shù)值運(yùn)算,則要通過(guò)其他命令實(shí)現(xiàn);3.變量與變量?jī)?nèi)容以一個(gè)等號(hào)『=』來(lái)連結(jié),等號(hào)兩邊不能直接接空格符;4.變量?jī)?nèi)容若有空格符可使用雙引號(hào)『"』或單引號(hào)『'』將變量?jī)?nèi)容結(jié)合起來(lái);5.可用轉(zhuǎn)義字符『\』將特殊符號(hào)(如[Enter],$,\,空格符,'等)變成一般字符,如:『myname=VBird\Tsai』4.3?Shell程序設(shè)計(jì)4.3.2?Shell變量A.變量的設(shè)置規(guī)則:6、在定義變量時(shí),如果需要由其他的指令所提供的信息時(shí),可以使用反引號(hào)`指令`或$(指令)。例如想要取得核心版本的設(shè)定:『version=$(uname-r)』再『echo$version』可得『3.10.0-229.el7.x86_64』7、若該變量為擴(kuò)增變量?jī)?nèi)容時(shí),則可用"$變量名稱(chēng)"或${變量}累加內(nèi)容,如下所示:『PATH="$PATH":/home/bin』或『PATH=${PATH}:/home/bin』8、用戶(hù)自定義變量只能在當(dāng)前shell中生效,而環(huán)境變量會(huì)在當(dāng)前shell以及其所有子shell中生效。若想該變量需要在其他子程序執(zhí)行,則需要以export來(lái)使變量變成環(huán)境變量:『export變量名=變量值』9、取消變量的方法為使用unset:『unset變量名稱(chēng)』例如取消myname的設(shè)定:『unsetmyname』4.3?Shell程序設(shè)計(jì)4.3.2?Shell變量A.變量的設(shè)置規(guī)則:例:var=”Helloworld”echo$varA=`ls-la`或$(ls-la)#將一個(gè)命令的執(zhí)行結(jié)果賦值給變量echo$Ax=456x=${x}789echo$x#輸出4567894.3?Shell程序設(shè)計(jì)4.3.2?Shell變量B.read命令接收用戶(hù)的輸入語(yǔ)法:read[選項(xiàng)]變量

-p提示語(yǔ)句-n字符個(gè)數(shù)-t等待時(shí)間,單位為秒-s隱藏輸入作用:接收用戶(hù)的輸入保存到指定的變量例:read-t30-p“Pleaseinputyourname:”name4.3?Shell程序設(shè)計(jì)4.3.3

Shell運(yùn)算符1.expr算術(shù)運(yùn)算原生bash不支持簡(jiǎn)單的數(shù)學(xué)運(yùn)算,但可以通過(guò)其他命令實(shí)現(xiàn),如expr,是一款表達(dá)式計(jì)算工具,使用它能完成表達(dá)式的求值操作。注意變量和運(yùn)算符之間要有空格,例如“2+2”不對(duì),要寫(xiě)成“2+2”,且只能處理整數(shù)的運(yùn)算。+加法:`expr2+3`-減法:`expr5-3`*乘法:`expr5*3`,乘號(hào)*前要加轉(zhuǎn)義字符\/除法:`expr5/3`,結(jié)果取整%取余:`expr5%3`==相等。用于比較兩個(gè)數(shù)字,相同則返回真(1),否則返回假(0)!=不相等。用于比較兩個(gè)數(shù)字,不同則返回真(1),否則返回假(0)4.3?Shell程序設(shè)計(jì)4.3.3

Shell運(yùn)算符1.expr算術(shù)運(yùn)算原生bash不支持簡(jiǎn)單的數(shù)學(xué)運(yùn)算,但可以通過(guò)其他命令實(shí)現(xiàn),如expr,是一款表達(dá)式計(jì)算工具,使用它能完成表達(dá)式的求值操作。注意變量和運(yùn)算符之間要有空格,例如“2+2”不對(duì),要寫(xiě)成“2+2”,且只能處理整數(shù)的運(yùn)算。+加法:`expr2+3`-減法:`expr5-3`*乘法:`expr5*3`,乘號(hào)*前要加轉(zhuǎn)義字符\/除法:`expr5/3`,結(jié)果取整%取余:`expr5%3`==相等。用于比較兩個(gè)數(shù)字,相同則返回真(1),否則返回假(0)!=不相等。用于比較兩個(gè)數(shù)字,不同則返回真(1),否則返回假(0)4.3?Shell程序設(shè)計(jì)4.3.3

Shell運(yùn)算符2.$[]和$(())算術(shù)運(yùn)算兩者都可以用于數(shù)學(xué)運(yùn)算,支持+、-、*、/、%,還支持比較運(yùn)算和邏輯運(yùn)算>、<、==、!=、++、--、!(求反)、~(按位求反)、**(冪運(yùn)算)、<<、>>、&、|、&&、||,且不用轉(zhuǎn)義。例:a=5;b=6;c=7echo$((a+b+c))echo$((a++))echo$((a==b))echo$((b>>1))echo$((b**2))echo$(((a>b)&&(a>c)))注意:$()的作用是命令替換與反引號(hào)作用一樣。4.3?Shell程序設(shè)計(jì)4.3.3

Shell運(yùn)算符3.關(guān)系運(yùn)算符關(guān)系運(yùn)算符只支持?jǐn)?shù)字,不支持字符串,除非字符串的值是數(shù)字。-eq比較兩個(gè)數(shù)是否相等,相等返回true,如:[$a-eq$b]-ne比較兩個(gè)數(shù)是否不相等,不相等返回true,如:[$a-ne$b]-gt比較左邊數(shù)是否大于右邊數(shù),若是返回true,如:[$a-gt$b]-lt比較左邊數(shù)是否小于右邊數(shù),若是返回true,如:[$a-lt$b]-ge比較左邊數(shù)是否大于等于右邊數(shù),若是返回true,如:[$a-ge$b]-le比較左邊數(shù)是否小于等于右邊數(shù),若是返回true,如:[$a-le$b]4.3?Shell程序設(shè)計(jì)4.3.3

Shell運(yùn)算符4.布爾運(yùn)算符!非運(yùn)算,表達(dá)式為true,則返回false,否則返回true,如:[!false]返回true-o或運(yùn)算,有一個(gè)表達(dá)式為真,則結(jié)果為真,如:[$a-lt20-o$b-gt100]-a與運(yùn)算,有一個(gè)表達(dá)式為假,則結(jié)果為假,如:[$a-lt20-a$b-gt100]4.3?Shell程序設(shè)計(jì)4.3.3

Shell運(yùn)算符5.字符串運(yùn)算符=檢測(cè)兩個(gè)字符串是否相等,相等則返回true。如[$a=$b]!=檢測(cè)兩個(gè)字符串是否不相等,不相等則返回true。如[$a!=$b]-z檢測(cè)字符串長(zhǎng)度是否為0,為0則返回true。如[-z$a]-n檢測(cè)字符串長(zhǎng)度是否不為0,不為0則返回true。如[-n$a]str檢測(cè)字符是否為空,不為空則返回true。如[$a]4.3?Shell程序設(shè)計(jì)4.3.3

Shell運(yùn)算符6.文件測(cè)試運(yùn)算符-bfile檢測(cè)文件是否是塊設(shè)備文件,如果是,則返回true,如:[-b$file]-cfile檢測(cè)文件是否是字符設(shè)備文件,如果是,則返回true,如:[-c$file]-dfile檢測(cè)文件是否是目錄,如果是,則返回true,如:[-d$file]-ffile檢測(cè)文件是否是普通文件,如果是,則返回true,如:[-f$file]-rfile檢測(cè)文件是否可讀,如果是,則返回true,如:[-r$file]-wfile檢測(cè)文件是否可寫(xiě),如果是,則返回true,如:[-w$file]-xfile檢測(cè)文件是否可執(zhí)行,如果是,則返回true,如:[-x$file]-sfile檢測(cè)文件是否為空(文件大小是否大于0),不為空則返回true,如:[-s$file]-efile檢測(cè)文件(包括目錄)是否存在,如果是,則返回true,如:[-e$file]4.3?Shell程序設(shè)計(jì)4.3.2?流程控制語(yǔ)句1.條件語(yǔ)句所有程序設(shè)計(jì)語(yǔ)言的基礎(chǔ)是對(duì)條件進(jìn)行測(cè)試判斷,并根據(jù)結(jié)果采取不同行動(dòng)的能力。此處要注意Shell與其他編程語(yǔ)言的條件測(cè)試上的表現(xiàn)非常不同。Shell中的if語(yǔ)句本身并不執(zhí)行任何判斷,它實(shí)際上接受一個(gè)命令串作為參數(shù),然后執(zhí)行這個(gè)命令串;當(dāng)命令串返回值為1,就表示為“真”,if語(yǔ)句進(jìn)入對(duì)應(yīng)的語(yǔ)句塊;當(dāng)命令串返回值為非1時(shí),則表示“假”,if語(yǔ)句跳過(guò)對(duì)應(yīng)的語(yǔ)句塊。在Shell基本中的if條件語(yǔ)句分為單分支結(jié)構(gòu)、雙分支結(jié)構(gòu)、多分支結(jié)構(gòu),復(fù)雜都逐級(jí)上升,但可以讓Shell腳本更加地靈活。4.3?Shell程序設(shè)計(jì)(1)條件判斷:test命令和[]Shell腳本中的布爾判斷(或條件判斷)命令可使用[或test,這兩個(gè)命令的作用是一樣的,只是為了增強(qiáng)可讀性,當(dāng)使用[命令時(shí),需要使用符號(hào)]來(lái)結(jié)尾。4.3?Shell程序設(shè)計(jì)(2)判斷類(lèi)型:字符串比較、數(shù)字比較和文件有關(guān)的條件測(cè)試test命令或[]可以使用的條件判斷類(lèi)型可以歸納為3類(lèi):字符串比較、數(shù)字比較和文件有關(guān)的條件測(cè)試。4.3?Shell程序設(shè)計(jì)(3)if條件語(yǔ)句·單分支結(jié)構(gòu),僅用if、then、fi關(guān)鍵詞組成,只有當(dāng)條件成立后才執(zhí)行then后面的語(yǔ)句。具體語(yǔ)法結(jié)構(gòu)如下:if條件測(cè)試操作then命令序列fi4.3?Shell程序設(shè)計(jì)(3)if條件語(yǔ)句例子:?jiǎn)畏种ЫY(jié)構(gòu)iftest-x/home/test/hello.sh;thenecho"文件可執(zhí)行"/home/test/hello.shfi或if[-x/home/test/hello.sh];thenecho"文件可執(zhí)行"/home/test/hello.shfi4.3?Shell程序設(shè)計(jì)(3)if條件語(yǔ)句·雙分支結(jié)構(gòu)是由if、then、else、fi關(guān)鍵詞組成,做出條件成立或條件不成立的判斷,執(zhí)行相應(yīng)操作。具體語(yǔ)法結(jié)構(gòu)如下:if條件測(cè)試操作then命令序列1else命令序列2fi例:iftest-x/home/test/test1.sh;thenecho"文件可執(zhí)行"/home/test/test1.shelseecho"文件不可執(zhí)行"fi4.3?Shell程序設(shè)計(jì)(3)if條件語(yǔ)句多分支結(jié)構(gòu)相對(duì)就比較復(fù)雜,由if、then、else、elif、fi關(guān)鍵詞組成,根據(jù)多種條件成立的可能性執(zhí)行不同的操作。具體語(yǔ)法結(jié)構(gòu)如下:if條件測(cè)試操作1then命令序列1elif條件測(cè)試操作2then命令序列2else命令序列3fi4.3?Shell程序設(shè)計(jì)(3)if條件語(yǔ)句

多分支結(jié)構(gòu)例:#!/bin/bashread-p"pleaseinputyourname:"nameecho$nameif[$name=root];thenecho"hello$name,welcome!"elif[$name=fhj];thenecho"hello$name,welcome!"elif[$name=test];thenecho"hello$name,welcome!"elseecho"getouthere!"fi4.3?Shell程序設(shè)計(jì)(4)case條件語(yǔ)句case條件語(yǔ)句是一個(gè)多分支語(yǔ)句,根據(jù)case變量的值用來(lái)匹配不同的操作。具體語(yǔ)法結(jié)構(gòu)如下所示:case變量invalue1)#

)屬于關(guān)鍵詞commands;;#結(jié)尾使用兩個(gè)連續(xù)的;;value2)commands;;.........................*)#最后一個(gè)變量的內(nèi)容都會(huì)用*來(lái)代表所有其他值commands;;esac4.3?Shell程序設(shè)計(jì)(4)case條件語(yǔ)句例:#!/bin/bashread-p'請(qǐng)輸入1到4之間的整數(shù):'numecho"你輸入的數(shù)字為:"case$numin1)echo"你輸入了1";;2)echo"你輸入了2";;3)echo"你輸入了3";;4)echo"你輸入了4";;*)echo"你輸入的值不合要求";;esac4.3?Shell程序設(shè)計(jì)2.循環(huán)語(yǔ)句循環(huán)結(jié)構(gòu)用于反復(fù)執(zhí)行一段語(yǔ)句,是程序設(shè)計(jì)中的基本結(jié)構(gòu)之一。Shell中的循環(huán)結(jié)構(gòu)有三種:while、until和for。(1)while語(yǔ)句while語(yǔ)句重復(fù)執(zhí)行命令,直到測(cè)試條件為假終止循環(huán)。該語(yǔ)句的基本結(jié)構(gòu)如下,注意,commands可以是多條命令語(yǔ)句組成的語(yǔ)句塊。whiletest-commandsdocommandsdone4.3?Shell程序設(shè)計(jì)補(bǔ)充:打印色彩echo-n-e"\033[47;31m測(cè)試顏色\033[0m"其中47的位置代表底色,31的位置是代表字的顏色字顏色:30-----------3730:黑31:紅32:綠33:黃34:藍(lán)色35:紫色36:深綠37:白色字背景顏色范圍:40----4740:黑41:深紅42:綠43:黃色44:藍(lán)色45:紫色46:深綠47:白色===============================================ANSI控制碼的說(shuō)明\33[0m關(guān)閉所有屬性\33[1m設(shè)置高亮度\33[4m下劃線\33[5m閃爍\33[7m反顯\33[8m消隱\33[30m--\33[37m設(shè)置前景色\33[40m--\33[47m設(shè)置背景色\33[nA光標(biāo)上移n行\(zhòng)33[nB光標(biāo)下移n行\(zhòng)33[nC光標(biāo)右移n行\(zhòng)33[nD光標(biāo)左移n行\(zhòng)33[y;xH設(shè)置光標(biāo)位置\33[2J清屏\33[K清除從光標(biāo)到行尾的內(nèi)容\33[s保存光標(biāo)位置\33[u恢復(fù)光標(biāo)位置\33[?25l隱藏光標(biāo)\33[?25h顯示光標(biāo)4.3?Shell程序設(shè)計(jì)例:#!/bin/bashecho打印國(guó)際象棋棋盤(pán)#國(guó)際象棋棋盤(pán)為八行八列,以?xún)蓚€(gè)空格為一個(gè)盤(pán)格,打印空格底色實(shí)現(xiàn)棋盤(pán)效果。i=1while((i<=8));doj=1while((j<=8));donum=$[$[i+j]%2]#計(jì)算行數(shù)和列數(shù)之和取余的值if[$num-eq0];thenecho-n-e"\033[41m\033[0m\033"#-n不換行-e處理特殊字符elif[$num-eq1];thenecho-n-e"\033[47m\033[0m\033"filetj++#let來(lái)指示下面是算術(shù)表達(dá)式,let表達(dá)式內(nèi)變量可不用加$doneleti++echo#換行done4.3?Shell程序設(shè)計(jì)(2)until語(yǔ)句until是while語(yǔ)句的另一種寫(xiě)法—除了測(cè)試條件相反(條件不滿(mǎn)足時(shí)執(zhí)行循環(huán)體),其基本語(yǔ)法結(jié)構(gòu)如下:until條件測(cè)試docommandsdone4.3?Shell程序設(shè)計(jì)例:#!/bin/bashecho打印國(guó)際象棋棋盤(pán)#國(guó)際象棋棋盤(pán)為八行八列,以?xún)蓚€(gè)空格為一個(gè)盤(pán)格,打印空格底色實(shí)現(xiàn)棋盤(pán)效果。i=1until((i>8));doj=1

until((j>8));donum=$[$[i+j]%2]#計(jì)算行數(shù)和列數(shù)之和取余的值if[$num-eq0];thenecho-n-e"\033[41m\033[0m\033"#-n不換行-e處理特殊字符elif[$num-eq1];thenecho-n-e"\033[47m\033[0m\033"filetj++#let來(lái)指示下面是算術(shù)表達(dá)式,let表達(dá)式內(nèi)變量可不用加$doneleti++echo#換行done4.3?Shell程序設(shè)計(jì)(3)for語(yǔ)句使用while語(yǔ)句可以完成Shell編程中的所有循環(huán)任務(wù),但有些時(shí)候用戶(hù)希望從列表中逐一取一系列的值(例如去除用戶(hù)提供的參數(shù)),此時(shí)使用while和until就顯得不太方便。Shell提供了for語(yǔ)句來(lái)循環(huán)處理一組值,這組值可以是任意字符串的集合。for的基本語(yǔ)法如下:for變量名in取值列表

或((exp1;exp2;exp3))docommandsdone4.3?Shell程序設(shè)計(jì)例1:#!/bin/bash#打印/home/test路徑下所有內(nèi)容foriin/home/test/*;doecho$idone

4.3?Shell程序設(shè)計(jì)例2:#!/bin/bash#打印九九乘法表foriin{1..9};dofor((j=1;j<=i;j++));doecho-n-e"$j*$i=$[i*j]\t"doneechodoneunsetij4.3?Shell程序設(shè)計(jì)例3:#!/bin/bashecho打印國(guó)際象棋棋盤(pán)#國(guó)際象棋棋盤(pán)為八行八列,以?xún)蓚€(gè)空格為一個(gè)盤(pán)格,打印空格底色實(shí)現(xiàn)棋盤(pán)效果。for((i=1;i<=8;i++));do

for

jin{1..8};donum=$[$[i+j]%2]#計(jì)算行數(shù)和列數(shù)之和取余的值if[$num-eq0];thenecho-n-e"

溫馨提示

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