openEuler系統(tǒng)管理- 課件 第6章-2 Shell腳本編程基礎_第1頁
openEuler系統(tǒng)管理- 課件 第6章-2 Shell腳本編程基礎_第2頁
openEuler系統(tǒng)管理- 課件 第6章-2 Shell腳本編程基礎_第3頁
openEuler系統(tǒng)管理- 課件 第6章-2 Shell腳本編程基礎_第4頁
openEuler系統(tǒng)管理- 課件 第6章-2 Shell腳本編程基礎_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章Shell腳本編程基礎深入了解Shell腳本編程02認識Shell腳本Shell編程基礎系統(tǒng)特性腳本定義以“.sh”結尾的文件能讓用戶更清晰地分辨出這是一個Shell腳本文件,便于管理和操作。分類意義在Linux操作系統(tǒng)中,按照Shell語法編寫成的文件稱為Shell腳本。Linux不以文件擴展名識別文件類型,將Shell腳本文件以“.sh”結尾,主要是為方便用戶對文件進行分類。文件擴展名主要是為了方便用戶對文件進行分類,Linux系統(tǒng)本身不依賴擴展名來識別文件類型。Linux操作系統(tǒng)不會以文件擴展名來識別文件類型,這與其他一些操作系統(tǒng)有所不同。擴展名作用Shell腳本定義03010204功能豐富Shell腳本的重要性支持變量的輸入輸出、引用、比較語句、判斷語句、條件語句、循環(huán)語句等,能實現(xiàn)與其他語言程序相同的效果??梢跃帉懩_本實現(xiàn)自動化的系統(tǒng)管理任務,如定時備份、文件清理等,提高工作效率。bash作為openEuler操作系統(tǒng)中默認使用的Shell解釋器,與其他的Shell有很好的兼容性,使用廣泛。自動化任務兼容性集成性可以與其他系統(tǒng)命令和工具集成,方便進行系統(tǒng)配置和管理。04030102在處理一些簡單的系統(tǒng)任務時,執(zhí)行效率較高,但對于復雜的計算和算法,可能不如專門的編程語言。執(zhí)行效率能夠直接與Linux系統(tǒng)的各種命令和工具進行交互,方便進行系統(tǒng)管理和操作。主要應用于系統(tǒng)管理、自動化任務等方面,而其他編程語言可能更適用于開發(fā)大型軟件和復雜的應用程序。Shell腳本與其他語言對比語法簡單系統(tǒng)交互性強Shell腳本語法相對簡單,易于學習和上手,對于初學者來說更容易掌握。應用場景編寫并且執(zhí)行一個簡單的Shell腳本(1)進入openEuler終端,使用vim命令創(chuàng)建一個Shell腳本文件hello.sh。[root@openEuler~]#vimhello.sh(2)在文件中輸入以下內容保存并退出:#!/bin/bashecho'HelloWorld!'其中,第一行中的#!是一種特殊的表示符,后面跟著的是解釋此腳本的Shell的路徑,表示的是這個腳本使用/bin/bash來解釋并執(zhí)行。第3章中介紹過,bash是openEuler操作系統(tǒng)中默認使用的Shell解釋器,它與其他的Shell有很好的兼容性,使用得也較為廣泛。如果需要使用其他解釋器,也可以在這里進行設定,如/bin/ksh、/bin/sh等。(3)執(zhí)行hello.sh。一般有兩種方式執(zhí)行.sh文件:#第一種方式[root@openEuler~]#shhello.sh#第二種方式[root@openEuler~]#chmod+xhello.sh[root@openEuler~]#./hello.sh第一種方式是直接使用sh命令調用腳本。在第二種方式中,chmod是修改文件權限的命令,chmod+xhello.sh表示對hello.sh文件賦予可執(zhí)行的權限,“./”表示執(zhí)行該文件。(4)此時在終端界面中會顯示“HelloWorld!”字樣。03010204通常情況下,每一條命令占一行。多行命令Shell腳本執(zhí)行規(guī)則縮進無關命令分行腳本文件編寫過程中,每條命令前面的縮進不會影響命令的執(zhí)行。順序執(zhí)行Shell腳本中的命令將按照從上到下的順序執(zhí)行。如果必須將多條命令寫在同一行,命令之間可以用分號進行分隔,區(qū)分執(zhí)行的先后順序。掌握數(shù)據(jù)交互輸入輸出命令read命令read命令用于讀取標準輸入的下一行。在標準輸入中,新一行從開始到換行符前包含的所有字符會被完整讀取,同時也可以將其賦給相應的變量。此外,read命令還可以結合echo命令,實現(xiàn)讀取輸入與輸出的功能?!臼纠?-17】#使用read命令讀取輸入中的5個字符,并提示信息“inputword:”[root@openEuler~]#read-p"inputword:"-n5inputword:abcdfecho命令echo命令支持將信息發(fā)送到標準的輸出設備,此時,傳輸?shù)男畔⒁宰址姆绞奖4?。除此之外,echo命令還可以用來輸出變量的值?!臼纠?-18】#使用echo命令輸出“HelloWorld”,兩個單詞間用“Tab”鍵隔開[root@openEuler~]#echo-e"Hello\tWorld"Hello Worldprintf命令如%s表示輸出字符串,%d表示輸出整數(shù)等。功能概述格式替代符printf命令和echo命令功能類似,可輸出變量的值,支持按指定格式輸出結果?!臼纠?-19】#使用printf命令輸出“HelloWorld”并換行[root@openEuler~]#printf"Hello\nWorld"HelloWorld#使用printf命令輸出[root@openEuler~]#printf"%s\t%s\t\n%s"AnnyBobCandyAnnyBobCandy處理特殊字符引用01040203在一對雙引號中的大部分字符表示其字面含義,支持變量引用、命令替換等。在一對單引號中的所有字符都會表示其字面含義,但單引號本身不能出現(xiàn)在一對單引號中。轉義字符使用轉義字符可以使緊隨其后的第一個特殊字符取其字面含義,如echo$會得到結果$。引用機制類型單引號允許將腳本中多行的內容重定向到一個命令,可避免使用臨時文件。雙引號Here-documentHere-document應用命令語法格式:command<<IDENT...IDENT其中,<<表示引導的標記,IDENT表示限定符,它可以由開發(fā)人員自行命名。在兩個IDENT限定符之間的所有內容會被當作一個文件,并用作command的標準輸入。其中常用的限定符EOF(EndOfFile,文件結束符)往往用來表示自定義終止符。當然,既然是自定義的,也可以將其設置為其他名字,如ENDOFFILE等也都是可以的。EOF一般會配合cat命令來實現(xiàn)多行文本輸出的功能?!臼纠?-25】#使用cat命令輸出多行文本[root@openEuler~]#cat<<EOF>HelloWorld!>Thisisthefirsttime.>EOFHelloWorld!Thisisthefirsttime.實現(xiàn)條件判斷比較語句數(shù)值比較文件比較邏輯比較比較語句類型字符串比較文件比較數(shù)值比較字符串比較字符串比較判斷語句if判斷語句-單分支語句命令格式1:if比較語句then

執(zhí)行語句fi命令格式2:if比較語句;then

執(zhí)行語句fi【示例6-26】#單分支語句[root@openEuler~]#if[20-gt10]>then>echo'bigger'>fibiggerif判斷語句-雙分支語句命令格式:if比較語句then執(zhí)行語句1else執(zhí)行語句2fi【示例6-27】#雙分支語句[root@openEuler~]#if[10-gt20]>then>echo'bigger'>else>echo'smaller'>fismallerif判斷語句-多分支語句命令格式:if比較語句1then執(zhí)行語句1elif比較語句2then執(zhí)行語句2else執(zhí)行語句3fi【示例6-28】#實現(xiàn)如下功能:如70大于85,輸出excellent;如70大于60,輸出good;否則輸出bad[root@openEuler~]#if[70-gt85]>then>echo'excellent'>elif[70-gt60]>then>echo'good'>else>echo'bad'>figood條件語句語法格式將指定的變量與每一組值進行匹配,匹配成功則執(zhí)行相應命令。匹配規(guī)則casecase是Shell中的條件語句,它的使用方式與其他編程語言中的類似,可以實現(xiàn)在一組可能的值中匹配特定值,從而避免使用冗長的多分支的判斷語句。命令格式:case變量in

取值1|取值2)

執(zhí)行命令1 ;;

取值3)

執(zhí)行命令3 ;; *)

默認命令 ;;esac條件語句case【示例6-29】#實現(xiàn)如下功能:根據(jù)輸入的參數(shù)var的值,輸出對應的結果[root@openEuler~]#var=6[root@openEuler~]#case$varin>"1")>echo'Monday'>;;>"2")>echo'Tuesday'>;;>"6"|"7")>echo'Weekend'>;;>*)>echo'others'>;;>esacWeekend循環(huán)語句for循環(huán)循環(huán)語句類型當判斷條件為假時執(zhí)行循環(huán),與while循環(huán)相反。支持多種基本格式,可遍歷取值列,如for變量in取值列do執(zhí)行命令done。當判斷條件為真時執(zhí)行循環(huán),如while判斷條件do執(zhí)行命令done。在循環(huán)內可以使用其他循環(huán)命令,實現(xiàn)復雜的循環(huán)邏輯。while循環(huán)嵌套循環(huán)until循環(huán)for循環(huán)命令格式1:for變量in取值列do

執(zhí)行命令done命令格式2:for變量in取值列;do執(zhí)行命令;done命令格式3:for((初始值;循環(huán)控制條件;變量變化方式))do

執(zhí)行命令donefor命令后的取值列默認用空格來分隔其中的每個取值。如果在單獨的取值中有空格,就必須用雙引號包圍這些值。for命令還支持從變量列表中讀取變量,例如$list。同時也支持從命令中讀取變量,例如$(cat$file)。如果要使用for命令來自動遍歷/root目錄下的文件,可以在文件名或路徑名中使用通配符。此時執(zhí)行forfilein/root/*,將會遍歷/root目錄下的所有文件。while循環(huán)命令格式1:while判斷條件do執(zhí)行命令done只有當判斷條件為真時,才會進入循環(huán)執(zhí)行命令。同時在執(zhí)行命令部分,需要添加改變判斷條件的命令,這樣才能在有限步驟后結束while循環(huán),否則會進入無限循環(huán)。【示例6-32】#計算1+2+…+100的值[root@openEuler~]#vimtest_while.sh#!/bin/bashi=1sum=0while[$i-le100]dosum=$[$sum+$i]i=$[$i+1]doneecho$sum[root@openEuler~]#shtest_while.sh5050until循環(huán)命令格式:until判斷條件do執(zhí)行命令done與while命令相比,until命令的工作原理完全相反。當判斷條件為真后,until命令才會退出循環(huán)執(zhí)行命令。但同樣,在執(zhí)行命令部分,也需要添加改變判斷條件的命令,這樣才能在有限步驟后退出循環(huán),否則會進入無限循環(huán)?!臼纠?-33】#計算1+2+…+100的值[root@openEuler~]#vimtest_until.sh#!/bin/bashi=1sum=0until[$i-gt100]dosum=$[$sum+$i]i=$[$i+1]doneecho$sum[root@openEuler~]#shtest_until.sh5050例如,兩層for循環(huán)的命令格式如下:for((初始值;循環(huán)控制條件;變量變化方式))do

執(zhí)行命令

for((初始值;循環(huán)控制條件;變量變化方式))do

執(zhí)行命令

donedone嵌套循環(huán)【示例6-34】[root@openEuler~]#vimdouble_loop.sh#!/bin/bashfor((y=1;y<=5;y++))dox=1while[$x-le$y]doecho-n$x((x++))doneechodonebreakn的命令格式如下:for((初始值;循環(huán)控制條件;變量變化方式))do

執(zhí)行命令

for((初始值;循環(huán)控制條件;變量變化方式))doif比較語句

thenbreaknfi

執(zhí)行命令

donedonebreak退出循環(huán)【示例6-35】#break命令退出循環(huán)[root@openEuler~]#vimbreak_loop.sh#!/bin/bashfor((i=1;i<=5;i++))dofor((j=1;j<=5;j++))doif((j==4));thenbreak2elseecho"Targetis($i,$j)"fidonedone[root@openEuler~]#shbreak_loop.shTargetis(1,1)Targetis(1,2)Targetis(1,3)使用break命令可以退出任意類型的循環(huán),包括for、while和until循環(huán)。在單循環(huán)和內部當前循環(huán)中,可以直接使用break命令跳出循環(huán)。如果要跳出外部循環(huán),則需要指定循環(huán)的層級,比如使用breakn,其

溫馨提示

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

評論

0/150

提交評論