




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
項目9SHELL編程基礎(chǔ)主講:***2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)12024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)2本項目學(xué)習(xí)目標(biāo):1.知識目標(biāo)2.能力目標(biāo)掌握Shell的基本概念;掌握Shell的基本語法;掌握Shell的程序流程控制方法;了解Shell程序的應(yīng)用。能熟練使用Vim等文本編輯器編寫Shell程序;能熟練使用順序、分支、循環(huán)等程序流程結(jié)構(gòu);能編寫簡單的Shell程序;能實現(xiàn)文件檢測、批量處理等任務(wù)。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)3學(xué)習(xí)任務(wù)任務(wù)9.1Shell概述任務(wù)9.2Shell的基本語法任務(wù)9.3Shell程序流程控制任務(wù)9.4Shell的應(yīng)用2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)4任務(wù)9.1Shell概述Shell是一個用C語言編寫的程序,它是用戶使用Linux的橋梁。為用戶提供了一個界面,用戶通過這個界面可以訪問操作系統(tǒng)內(nèi)核提供的服務(wù)。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)5Shell的基本功能有助于編寫更好的Shell程序,在執(zhí)行Shell命令時,多條命令可以在一個命令行上執(zhí)行,但要使用分號(;)分隔命令。使用Shell編程時應(yīng)注意以下幾點:(1)Shell命令區(qū)分英文字母大小寫;(2)應(yīng)在Shell程序中加入必要的注釋,以便查詢和維護,注釋以“#”開頭;(3)對Shell變量進行數(shù)學(xué)運算時,使用乘法符號“*”時,要用轉(zhuǎn)義字符“\”進行轉(zhuǎn)義;(4)Shell對程序中多余的空格不進行任何處理,用戶可以利用這一特性調(diào)整程序縮進,增強程序的可讀性。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)69.1.1Shell分類Shell分為圖形界面Shell(GraphicalUserInterfaceShell,GUIShell)和命令行Shell(CommandLineInterfaceShell,CLIShell)兩種,常見的圖形界面Shell包括應(yīng)用廣泛的WindowsExplorer和LinuxShell,其中LinuxShell又包括XWindow、GNOME、KDE、Xfce等。Shell提供了用戶與操作系統(tǒng)之間的通信方式。這種通信可以以交互(從鍵盤輸入,且可以立即得到響應(yīng))或非交互(ShellScript)的方式進行。ShellScript是放在文件中的一個Shell和操作系統(tǒng)的命令,它們可以被重復(fù)使用。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)7Bash是UNIXShell的一種,是一個命令處理器,通常運行于文本窗口中,并能執(zhí)行用戶直接輸入的命令。Bash還能從文件中讀取命令,這樣的文件稱為腳本。和其他UNIXShell一樣,它支持文件名替換(通配符匹配)、管道、命令替換、變量,以及條件判斷和循環(huán)遍歷等程序流程控制結(jié)構(gòu)。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)8任務(wù)9.2Shell基本語法Shell程序有很多類似C語言程序和其他語言程序的特征,但是通常又沒有那么復(fù)雜。Shell程序是指放在一個文件中的一系列Linux命令。在運行Shell程序時,Linux逐個地解釋和執(zhí)行其中的命令。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)9編寫并運行第一個Shell程序(1)輸入“vimfirst.sh”命令,新建“first.sh”腳本文件,然后輸入“i”命令進入插入模式,輸入如下內(nèi)容:#!/bin/bash#ThisisthefirstBashShellprogram#ScriptName:first.shecho"Hello,thisisfirstBashShellprogram"2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)10(2)輸入“wq”命令,保存文件并退出。(3)設(shè)置“first.sh”腳本文件的權(quán)限,并運行“first.sh”腳本文件。編寫完Shell程序后,不能立即運行該程序,需給“first.sh”腳本文件設(shè)置可執(zhí)行的權(quán)限。使用如下命令:[root@localhostbin]#chmod+xfirst.sh2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)11方法一,直接運行當(dāng)前文件夾下的“first.sh”腳本文件,使用如下命令:[root@localhostbin]#./first.sh;方法二,把“first.sh”腳本文件作為一個參數(shù)傳遞給Shell命令:[root@localhostbin]#/bin/bashfirst.sh方法三,使用sh命令運行“first.sh”腳本文件,使用如下命令:shfirst.sh有3種方法運行Shell程序2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)12使用方法三運行Shell程序,運行結(jié)果如下圖所示2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)13(1)Shell的類型,如例9-2-1中的“#!/bin/bash”指出了Shell的類型為Bash。(2)注釋,以“#”開頭。(3)Shell變量,用“$”符號表示,如“$”和“${name}”,當(dāng)變量名的長度為1個字符時,建議使用“$N”的方式,當(dāng)變量名的長度大于1個字符時,建議使用“${name}”的方式。(4)控制語句。Shell程序的基本元素2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)14(1)編寫Shell程序。(2)保存腳本文件并退出。(3)為腳本文件賦予可執(zhí)行的權(quán)限。(4)運行Shell程序及調(diào)試。Shell編程的注意事項運行Shell程序的一般步驟(1)Shell程序的腳本文件一般以“.sh”為擴展名,沒有擴展名也可執(zhí)行。(2)Shell程序中有一些特殊符號。例如,“$”為變量符,如“$a”表示變量a的值(變量名的長度超過1個字符時,可用{}括起來);“\”為轉(zhuǎn)義字符,它能把特殊字符變成普通字符。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)15Shell變量可以用于保存路徑名、文件名或數(shù)字等。變量分為本地變量和環(huán)境變量兩種。本地變量即局部變量,只能在創(chuàng)建它們的Shell程序中使用,在Shell程序內(nèi)可以任意使用和修改本地變量。變量環(huán)境變量(1)環(huán)境變量可以在命令行界面中設(shè)置,但用戶被注銷時,這些變量將丟失。(2)環(huán)境變量的名稱一般由英文大寫字母組合而成。(3)環(huán)境變量必須用export命令導(dǎo)出。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)16定義變量的語法格式變量名=變量值變量的定義
(1)變量名中只能包括英文字母、數(shù)字和下畫線,且不能以數(shù)字開頭。(2)變量名中不能有空格。(3)變量名中不能有標(biāo)點符號。(4)變量名中不能有Bash中的關(guān)鍵字,如while、if、until等(請自行查閱相關(guān)資料了解其他Bash關(guān)鍵字)變量名的命名規(guī)則
2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)17(1)等號兩邊不能有空格。(2)變量的取值可以為空格,若其取值為空格,則必須用雙引號括起來。(3)變量名是區(qū)分英文字母大小寫的。定義變量時的注意事項Shell程序的注釋Shell腳本中使用“#”符號進行注釋#--------------------------------------------#這是一個注釋#作者:#--------------------------------------------以上程序不會被解釋器執(zhí)行。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)18任務(wù)9.3Shell程序流程控制Shell程序結(jié)構(gòu)Shell既是一種命令語言,又是一種程序設(shè)計語言。作為命令語言,它交互地解釋和執(zhí)行用戶輸入的命令或者自動地解釋和執(zhí)行用戶預(yù)先設(shè)置好的一系列命令;作為程序設(shè)計語言,它定義了各種變量和參數(shù),并提供了許多在高級語言中才具有的控制結(jié)構(gòu),包括順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)19順序結(jié)構(gòu)是最簡單、最常用的控制結(jié)構(gòu),順序結(jié)構(gòu)中的程序是按照程序語句的前后順序依次執(zhí)行的,用戶只需按照解決問題的順序?qū)懗鱿鄳?yīng)的語句即可。9.3.1順序結(jié)構(gòu)#!/bin/bash#echo"Helloeveryone!"echo"ThisisShellprogramming!"a="A"echo"ais$a"b="Good"echo"bis$b"2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)20順序結(jié)構(gòu)程序運行結(jié)果如下圖所示順序結(jié)構(gòu)2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)21分支結(jié)構(gòu)中的程序依據(jù)不同的條件進入程序中不同的模塊,不是嚴(yán)格按照語句出現(xiàn)的前后順序來執(zhí)行的。在設(shè)計分支結(jié)構(gòu)的過程中,需構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ句。分支結(jié)構(gòu)適用于帶有邏輯或關(guān)系比較等條件判斷的計算。9.3.2分支結(jié)構(gòu)2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)221.單分支結(jié)構(gòu)(if-then)單分支結(jié)構(gòu)用于對程序中的條件進行判斷,若條件成立,則執(zhí)行語句塊,若條件不成,立則不執(zhí)行語句塊。單分支結(jié)構(gòu)的語法格式如下:ifconditionthencommand1command2...commandNfi其中,condition是判斷條件,如果condition成立(結(jié)果為“真”),那么then后邊的語句塊將會被執(zhí)行;如果condition不成立(結(jié)果為“假”),那么不會執(zhí)行任何語句。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)23#!/bin/bash#echo"inputyourage:"readageecho"inputyourscore:"readscoreif(($age>18&&$score<60))then echo"Youareanadult,butyouhavefailedyourexam!"fi例如:輸入一個學(xué)生的年齡和成績,當(dāng)他的年齡大于18且成績小于60時,輸出“Youareanadult,butyouhavefailedyourexam”。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)242024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)252.雙分支結(jié)構(gòu)(if-else)雙分支結(jié)構(gòu)與單分支結(jié)構(gòu)不同,它對程序中的條件進行判斷,若條件成立,則執(zhí)行語句塊1,若條件不成立,則執(zhí)行語句塊2。它根據(jù)條件的結(jié)果在兩個語句塊中選擇其中一個執(zhí)行。。雙分支結(jié)構(gòu)的語法格式如下:ifconditionthencommand1command2...commandNelsecommandfi其中,如果condition成立,那么then后面的command1,command2,…,commandN語句將會被執(zhí)行;否則,執(zhí)行else后面的command語句。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)26#!/bin/bashreadareadbif(($a>$b))then echo"Themaxnumberis:$a"else echo"Themaxnumberis:$b"fi例如:從鍵盤上輸入兩個數(shù),比較兩個數(shù)的大小,并輸出較大的數(shù)。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)272024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)283.分支結(jié)構(gòu)的嵌套(if-elif-else)分支結(jié)構(gòu)的嵌套是指在分支結(jié)構(gòu)中又嵌入了分支結(jié)構(gòu),可以根據(jù)實際需要嵌入多層分支結(jié)構(gòu)。若條件成立,則執(zhí)行語句塊1,若條件不成立,則繼續(xù)判斷下一個條件是否成立,若成立,則執(zhí)行語句塊2,若不成立,則執(zhí)行其他語句塊。分支結(jié)構(gòu)嵌套的語法格式如下:ifcondition1thencommand1elifcondition2thencommand2elsecommandNfi如果condition1成立,那么then后面的command1語句會被執(zhí)行,如果condition1不成立,那么判斷下一個條件condition2,如果condition2成立,那么執(zhí)行command2語句,否則執(zhí)行else后面的commandN語句。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)29#!/bin/bashif[$1-eq$2];then echo"$1=$2"elif[$1-gt$2];then echo"$1>$2"elif[$1-lt$2];then echo"$1<$2"elif[$1-ne$2];then echo"$1!=$2"fi例如:從鍵盤上輸入兩個數(shù),若這兩個數(shù)相等,則輸出兩個數(shù)相等的信息,若第1個數(shù)大于第2個數(shù),則輸出第1個數(shù)大于第2個數(shù)的信息,若第1個數(shù)小于第2個數(shù),則輸出第1個數(shù)小于第2個數(shù)的依靠。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)302024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)314.多分支結(jié)構(gòu)(case)在實際應(yīng)用過程中經(jīng)常遇到需要多分支的情況,并且這些分支條件是并列的。在這種情況下,可以使用多分支結(jié)構(gòu),該結(jié)構(gòu)會根據(jù)表達式的值進行測試,當(dāng)表達式的值滿足某一個模式時,執(zhí)行對應(yīng)模式下的語句。在多分支結(jié)構(gòu)中,首先計算表達式的值,當(dāng)表達式的值與模式1相等時,執(zhí)行模式1后面的command1,commandN語句;當(dāng)表達式的值與模式2相等時,執(zhí)行模式2后面的command11,command1N語句。可以根據(jù)實際需要設(shè)計個多個模式及多個對應(yīng)的command語句,需要注意的是,每個語句塊后面需要有“;;”,并且“;;”不可以省略,如果省略,會導(dǎo)致某些語句不能被執(zhí)行。多分支結(jié)構(gòu)嵌套的語法格式如下:case表達式的值in模式1)command1command2...commandN;;模式2)command11command12...command1N;;esac2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)32例如:從鍵盤上輸入1~7之間的任意1個數(shù),實現(xiàn):輸入1,則輸出今天是星期一;輸入2,則輸出今天是星期二;輸入3,則輸出今天是星期三;輸入4,則輸出今天是星期四;輸入5,則輸出今天是星期五;輸入6,則輸出今天是星期六;輸入7,則輸出今天是星期日;否則提示輸入錯誤。2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)332024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)349.3.3循環(huán)結(jié)構(gòu)當(dāng)程序中有需要重復(fù)執(zhí)行的語句時,可以把需要重復(fù)執(zhí)行的語句寫在循環(huán)體中,然后設(shè)計循環(huán)條件,使得當(dāng)滿足循環(huán)條件時就執(zhí)行循環(huán)體中的語句,直到不滿足條件為止,然后退出循環(huán)結(jié)構(gòu)。for循環(huán)的語法格式如下:forvarinitem1item2...itemNdocommand1command2...commandNdone2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)35【例9-3-6】當(dāng)變量i<10時,從5開始輸出變量i的值。#!/bin/bash#for((i=5;i<10;i++))do echo"Thenumberis$i"done2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)369.3.3循環(huán)結(jié)構(gòu)2.while循環(huán)while循環(huán)用于不斷重復(fù)執(zhí)行一系列語句,也用于從輸入文件中讀取數(shù)據(jù)。condition通常為測試條件,若條件成立,則執(zhí)行do與done之間的語句,直到條件不成立時,退出循環(huán)。其語法格式如下:while循環(huán)的語法格式如下:whileconditiondocommanddone2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)37【例9-3-6】當(dāng)循環(huán)變量的值小于20時,輸出循環(huán)變量的值。#!/bin/bash#num=10while[$num-lt20]do echo"Thenumberis:$num" ((num++))done2024年1月2日Linux應(yīng)用基礎(chǔ)項目化教程(RHEL8.2/CentOS8.2)38任務(wù)9.4Shell應(yīng)用Shell程序可以實現(xiàn)對操作系統(tǒng)中的用戶文件等進行管理。在系統(tǒng)運維等方面,用戶可以編寫Shell
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 光伏變壓器知識培訓(xùn)課件
- 2025年法制宣傳日普法知識競賽搶答題庫及答案(共80題)
- 新員工入職培訓(xùn)流程與要點
- 《藝術(shù)概論:西方繪畫藝術(shù)的發(fā)展歷程及特點》
- 共享經(jīng)濟與協(xié)作式消費作業(yè)指導(dǎo)書
- 福建省龍巖市2024-2025學(xué)年高二上學(xué)期1月期末生物學(xué)試題(含答案)
- 兒童繪本中的教育意義解讀
- 人力資源外包合作協(xié)議
- 小學(xué)生讀書筆記讀后感
- 水資源開發(fā)與保護聯(lián)合協(xié)議
- (完整版)收據(jù)電子版
- 學(xué)術(shù)英語智慧樹知到課后章節(jié)答案2023年下南開大學(xué)
- 文獻檢索-第六講-畢業(yè)論文寫作與文獻檢索課件
- 劉鴻文版材料力學(xué)(第五版全套356張)課件
- IATF16949審核資料清單(詳細)
- 《旅游學(xué)概論》第一章
- 國際海事組織標(biāo)準(zhǔn)航海通信用語中英文對照
- 軸線翻身技術(shù)技術(shù)操作考核評分標(biāo)準(zhǔn)
- 部編2023版道德與法治六年級下冊活動園問題及答案
- 中電投山西鋁業(yè)有限公司寧武寬草坪鋁土礦資源開發(fā)利用、地質(zhì)環(huán)境保護與土地復(fù)墾方案
- 《所羅門王的指環(huán)》讀書筆記
評論
0/150
提交評論