Linux自動化運維(Shell與Ansible)(微課版) 課件 項目3 Shell 循環(huán)控制_第1頁
Linux自動化運維(Shell與Ansible)(微課版) 課件 項目3 Shell 循環(huán)控制_第2頁
Linux自動化運維(Shell與Ansible)(微課版) 課件 項目3 Shell 循環(huán)控制_第3頁
Linux自動化運維(Shell與Ansible)(微課版) 課件 項目3 Shell 循環(huán)控制_第4頁
Linux自動化運維(Shell與Ansible)(微課版) 課件 項目3 Shell 循環(huán)控制_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Linux自動化運維項目3:Shell循環(huán)控制

學(xué)習(xí)目標【知識目標】了解Shell循環(huán)控制基本概念。了解for語句、while語句基本語法。了解until語句、break語句、continue語句、select語句和exit語句的用法?!炯寄苣繕恕空莆說or語句基本語法。掌握while語句基本語法。掌握until語句、break語句、continue語句、select語句和exit語句使用方法。【素質(zhì)目標】培養(yǎng)讀者系統(tǒng)分析與解決問題的能力,使其能夠深入分析問題,掌握相關(guān)知識點,并在實踐中高效地完成項目任務(wù)。培養(yǎng)讀者的信息素養(yǎng)和學(xué)習(xí)能力,使其能夠靈活運用正確的學(xué)習(xí)方法和技巧,快速掌握新知識和技能,并不斷學(xué)習(xí)和進步。Shell循環(huán)控制任務(wù)1:for語句目錄/Contents01for語句基本語法02for語句常見示例01for語句基本語法for語句基本語法for循環(huán)最常見的形式是迭代一個值列表,用于遍歷一組數(shù)據(jù)并執(zhí)行相應(yīng)的操作,例如將指定的變量依次賦為給定的值或列表中的值,然后執(zhí)行一系列命令,直到數(shù)據(jù)列表中的所有值都被處理完畢為止。forvariableinlistdo

循環(huán)體done其中,variable表示一個變量,用于存儲數(shù)據(jù)列表迭代過程中當前元素的值list表示一個包含一組數(shù)據(jù)的列表,可以是用空格分隔的多個元素,也可以是一個命令的輸出結(jié)果,其數(shù)據(jù)可以是手動定義的值,也可以是通過通配符、命令替換等動態(tài)生成的值在循環(huán)體中,可以使用變量名來引用每個元素,執(zhí)行相應(yīng)的命令或語句foriin12345doecho"Number$i"donefor語句基本語法LinuxShell也支持類似于C語言的for循環(huán)語法:for((expression1;expression2;expression3))docommandsdoneexpression1通常用于初始化變量expression2是循環(huán)控制條件,循環(huán)會一直執(zhí)行直到此條件為假expression3通常用于更新循環(huán)變量for((i=1;i<=5;i++))doecho"Number$i"done02

for語句常見示例在LinuxShell腳本中,for循環(huán)是一種常用的迭代語句,它用于重復(fù)執(zhí)行一組命令直到滿足特定條件。for循環(huán)在自動化任務(wù)、處理文件集合、生成報告等場景中非常有用。for語句示例for循環(huán)示例,批量創(chuàng)建用戶:#!/bin/bash#假設(shè)要創(chuàng)建用戶user1,user2,user3...user10foriin{1..10}dousername="user$i"useradd$usernameecho"password"|passwd--stdin$usernameecho"User$usernamecreated."doneforiin{1..10}生成從1到10的數(shù)字序列。變量i在每次迭代中被賦予序列中的下一個值username=“user$i”使用變量i的值動態(tài)構(gòu)造用戶名useradd$username使用useradd命令創(chuàng)建一個新的用戶賬號,賬號名由username變量提供echo“password”|passwd--stdin$username將字符串“password”作為密碼通過管道傳遞給passwd命令,設(shè)置用戶的密碼echo“User$usernamecreated.”輸出一條消息到終端,表明用戶已經(jīng)被創(chuàng)建for循環(huán)示例,批量更新系統(tǒng):#!/bin/bash#假設(shè)hosts.txt包含了所有主機的IP地址forhostin$(cathosts.txt)doecho"Updating$host"ssh$host"sudoaptupdate&&sudoaptupgrade-y"donefor語句示例forhostin$(cathosts.txt):循環(huán)讀取hosts.txt文件中的每一行(每行包含一個主機地址),并將其賦值給變量host

ssh$host“sudoyum–yupdate”以實現(xiàn)對每個主機執(zhí)行SSH命令,遠程執(zhí)行系統(tǒng)更新for循環(huán)示例,監(jiān)控磁盤空間:#!/bin/bash#設(shè)定警戒線為20%空閑forserverinserver1server2server3dousage=$(ssh$server"df/|grep/|awk'{print\$4}'")if[$usage-le20];thenecho"Warning:Lowdiskspaceon$server"fidonefor語句示例forserverinserver1server2server3:直接在循環(huán)中列出服務(wù)器的名稱,變量server在每次迭代時被賦予一個服務(wù)器名usage=$(ssh$server“df/|grep/|awk‘{print\$4}’”):遠程執(zhí)行df命令來獲取磁盤使用情況,使用awk來提取可用空間的百分比for循環(huán)示例,備份日志文件:#!/bin/bash#日志文件所在的目錄log_path="/var/log/myapp"#備份目錄backup_path="/mnt/backup"forfilein$log_path/*.logdoecho"Backingup$file"cp$file$backup_pathdonefor語句示例forfilein$log_path/*.log:這個循環(huán)遍歷指定路徑下的所有.log文件。file變量在每次迭代中被賦予一個文件的完整路徑cp$file$backup_path:將找到的日志文件復(fù)制到備份目錄中謝謝Shell循環(huán)控制任務(wù)2:while、until和select語句目錄/Contents010203while語句until語句select語句01while語句while語句while語句用于根據(jù)指定的條件重復(fù)執(zhí)行一系列命令,在循環(huán)開始前先判斷條件是否成立,只有條件成立時才會執(zhí)行循環(huán)體中的命令,直到條件不成立為止。while語句的基本語法如下:condition是控制循環(huán)繼續(xù)執(zhí)行的條件。條件可以是任何返回退出狀態(tài)的命令,常見的有測試命令[]或[[]]。如果該條件評估為真(即命令的退出狀態(tài)碼是0),則執(zhí)行循環(huán)體內(nèi)的命令commands是一組在每次循環(huán)迭代中執(zhí)行的命令,只要條件為真,這些命令就會被重復(fù)執(zhí)行do是循環(huán)體的開始標記,done是循環(huán)體的結(jié)束標記whileconditiondo循環(huán)體done#!/bin/bash#目標服務(wù)器的IP地址server_ip="192.168.1.1"whiletruedo#使用ping命令檢查網(wǎng)絡(luò)連通性

ifping-c1$server_ip&>/dev/nullthenecho"Server$server_ipisup."elseecho"Warning:Server$server_ipisdown!"fisleep10#每10秒檢查一次donewhile語句示例while語句示例,監(jiān)控網(wǎng)絡(luò)連接:whiletrue是一個條件為真的無限循環(huán),這意味著腳本將持續(xù)運行,直到被外部打斷。ping-c1$server_ip表示使用ping命令測試指定IP地址的連通性。參數(shù)-c1表示發(fā)送一次ping請求。&>/dev/null表示將ping命令的標準輸出和標準錯誤都重定向到/dev/null,意味著屏蔽掉所有輸出。if語句表示根據(jù)ping命令的退出狀態(tài)判斷連通性。如果服務(wù)器響應(yīng)(即ping命令成功),則打印服務(wù)器正常;如果失敗,則打印警告信息。sleep10表示循環(huán)的每次迭代之間暫停10秒,以避免過于頻繁的檢查。#!/bin/bash#指定日志文件路徑log_file="/var/log/myapp.log"#使用tail-f實時讀取新添加到日志文件的內(nèi)容tail-f$log_file|whilereadlinedoecho"Newlogentry:$line"#可以在此處添加更多處理邏輯,如發(fā)送郵件通知等donewhile語句示例while語句示例,監(jiān)控日志文件的更新:tail-f$log_file用于實時監(jiān)視$log_file的最新添加內(nèi)容。此命令不會結(jié)束,會持續(xù)輸出文件新增的內(nèi)容。管道(|)表示tail-f的輸出被傳遞給whilereadline循環(huán),每次輸出一行。whilereadline表示循環(huán)讀取從tail-f傳遞過來的每一行,變量line包含當前讀取的行內(nèi)容。echo“Newlogentry:$line”表示將每一行的內(nèi)容輸出,前面加上提示字符串,實際使用中可以在此處進行更復(fù)雜的處理,如基于日志內(nèi)容觸發(fā)警報或執(zhí)行其他腳本。#!/bin/bash#目標目錄target_directory="/home/user/documents"#備份目錄backup_directory="/home/user/backup"#檢查修改時間并備份whiletruedofind$target_directory-mmin-60-typef|whilereadfiledocp$file$backup_directoryecho"Backedup$file"donesleep3600#每小時檢查一次donewhile語句示例while語句示例,自動備份修改過的文件:cp$file$backup_directory表示執(zhí)行實際的備份操作,它將符合條件的文件從它們的原始位置復(fù)制到指定的備份目錄。echo“Backedup$file”表示每當一個文件被成功備份后,腳本會輸出一條確認消息,指明哪個文件已被備份。sleep3600表示在while循環(huán)的每次迭代之后,腳本會暫停3600秒(即一小時)。這樣做是為了限制檢查頻率,避免過度消耗系統(tǒng)資源,對于日常備份來說,每小時檢查一次是足夠的。whiletrue是一個條件為真的無限循環(huán),意味著此腳本會持續(xù)運行,除非被外部中斷。這樣設(shè)置是為了確保定期監(jiān)控和備份文件,特別是在長時間運行的服務(wù)器或持續(xù)監(jiān)控的環(huán)境中。02until語句until語句until語句和while語句的作用類似,都是根據(jù)指定的條件重復(fù)執(zhí)行一系列命令。與while語句不同的是,until語句在循環(huán)開始前先判斷條件是否不成立,只有條件不成立時才會執(zhí)行循環(huán)體中的命令,直到條件成立為止。until語句的基本語法如下:untilconditiondo

循環(huán)體donecondition表示一個表達式或命令,用于定義循環(huán)的條件。在每次循環(huán)開始前,條件都會被檢查。如果條件為假,循環(huán)體中的代碼將被執(zhí)行;如果條件為真,循環(huán)將終止。until語句示例使用until語句輸出1~10的數(shù)字,具體示例如下:#!/bin/bashcounter=1#初始化計數(shù)器為1#使用until循環(huán)從1數(shù)到10until[$counter-gt10]doecho$countercounter=$((counter+1))#增加計數(shù)器的值donecounter=1設(shè)置計數(shù)器的初始值為1。until循環(huán)條件是[$counter-gt10],表示直到counter的值大于10,循環(huán)才會停止。這里的條件是檢查循環(huán)何時應(yīng)該停止,而不是何時繼續(xù)。until循環(huán)的本質(zhì)是“繼續(xù)執(zhí)行循環(huán)直到條件為真”。echo$counter表示在每次循環(huán)時輸出當前的計數(shù)器值。counter=$((counter+1))表示使用算術(shù)擴展增加計數(shù)器的值。03select語句select語句select語句用于顯示一個菜單供用戶選擇,根據(jù)用戶選擇執(zhí)行相應(yīng)的操作,即在循環(huán)開始前顯示一個菜單,然后等待用戶選擇,根據(jù)用戶輸入的序號執(zhí)行相應(yīng)的操作,直到用戶選擇退出為止。select語句的基本語法如下:selectvariableinlistdocommandsdonevariable:用戶選擇的項存儲在此變量中。list:提供一個列表供用戶選擇。這可以是一組字符串或一個數(shù)組。commands:用戶每次選擇后執(zhí)行的命令。通常,這里會包含一些基于變量值的決策邏輯,如case或if語句。do和done:定義了循環(huán)體的開始和結(jié)束。select語句示例使用select語句創(chuàng)建基本的菜單,讓用戶選擇要執(zhí)行的命令:#!/bin/bashecho"Pleaseselectatask:"selecttaskin'Listfiles''Currentdirectory''Exit'docase$REPLYin1)ls-l;;2)pwd;;3)echo"Exiting...";break;;*)echo"Invalidoption.Pleasetryagain.";;esacdone上述示例中,使用select創(chuàng)建一個包含三個選項的菜單:列出文件、顯示當前目錄和退出。$REPLY存儲用戶輸入的數(shù)字選項。case語句用于處理用戶的選擇,執(zhí)行相應(yīng)的命令。輸入3時使用break命令退出循環(huán)。select語句示例使用select語句創(chuàng)建腳本,允許用戶從當前目錄中選擇一個文件,然后對其執(zhí)行操作:#!/bin/bashecho"Selectafiletoview:"files=(*)selectfnamein"${files[@]}"doif[-n"$fname"];thencat"$fname"elseecho"Invalidselection."fibreak#只執(zhí)行一次選擇done上述示例中,files=(*)將當前目錄中的所有文件名存儲到一個數(shù)組中。使用select從數(shù)組中生成一個選擇菜單,用戶選擇文件后,if語句檢查$fname是否非空,如果是,則使用cat命令顯示文件內(nèi)容。循環(huán)在顯示文件后立即通過break結(jié)束。謝謝Shell循環(huán)控制任務(wù)3:break、continue和exit語句目錄/Contents010203break語句continue語句exit語句01break語句break語句break語句在Shell腳本中用于控制循環(huán)的執(zhí)行流,允許在滿足特定條件時提前退出循環(huán)。通常在避免不必要的處理、響應(yīng)用戶請求或停止數(shù)據(jù)處理等場景使用。break語句基本語法如下:whileconditiondo#循環(huán)體

ifconditionthenbreakfi#更多操作done在上述語法中,break語句通常包含在一個條件語句中。當滿足某個條件時,break語句會立即跳出循環(huán),終止循環(huán)的執(zhí)行。break語句示例break語句示例,搜索文件并中斷:#!/bin/bashtarget_files="/path/to/files/*"search_string="target_string"forfilein$target_filesdoifgrep-q"$search_string""$file";thenecho"Found'$search_string'in$file"break#找到后退出循環(huán)

elseecho"Searchingin$file..."fidone在上述示例中,腳本遍歷指定目錄下的所有文件。使用grep-q靜默檢查每個文件是否包含目標字符串。一旦grep-q找到匹配項(返回狀態(tài)為0),打印消息并使用break退出循環(huán)。如果沒有找到,腳本將繼續(xù)檢查下一個文件。break語句示例break語句示例,用戶輸入控制退出:#!/bin/bashwhiletruedoecho"Type'exit'toquitor'continue'tokeepgoing:"readuser_inputcase$user_inputin"exit")echo"Exitingtheprogram."break#退出循環(huán)

;;"continue")echo"Continuing...";;*)echo"Invalidinput,pleasetryagain.";;esacdone在上述示例中,使用whiletrue來不斷接受用戶輸入。使用read命令獲取用戶輸入,并通過case語句處理輸入。如果用戶輸入exit,打印退出消息并通過break結(jié)束循環(huán)。如果用戶輸入continue,腳本將繼續(xù)運行,并重新顯示輸入提示。對于無效輸入,腳本提醒用戶并等待下一次輸入。02continue語句continue語句continue語句用于在循環(huán)中跳過當前迭代,繼續(xù)下一次循環(huán)的執(zhí)行。它的作用是跳過當前迭代中剩余的代碼,繼續(xù)下一次循環(huán)的執(zhí)行。continue語句基本語法如下:whileconditiondo#循環(huán)體

ifconditionthencontinuefi#更多操作done當continue語句執(zhí)行時,它會忽略其后的所有循環(huán)體內(nèi)的命令,直接進行循環(huán)的下一個條件測試,如果條件仍為真,則繼續(xù)執(zhí)行循環(huán)體。這種行為適用于希望在滿足某些條件時跳過當前的處理步驟,而不中斷整個循環(huán)過程,從而提高代碼的效率和可讀性。continue語句示例continue語句示例,忽略特定文件類型的處理:#!/bin/bash#目錄路徑directory_path="/path/to/directory"#遍歷目錄中的所有文件forfilein"$directory_path"/*do#檢查文件是否為臨時文件

if[["$file"==*.tmp]];thenecho"Skippingtemporaryfile:$file"continue#跳過此文件的處理

fi#對非臨時文件執(zhí)行操作

echo"Processingfile:$file"#這里可以添加實際的文件處理命令,如轉(zhuǎn)換、復(fù)制等done循環(huán)通過forfilein"$directory_path"/*遍歷指定目錄下的所有文件。if[[“$file”==*.tmp]];then語句通過模式匹配用于檢查當前文件是否以.tmp結(jié)尾。如果文件是臨時文件,輸出跳過的消息,并執(zhí)行continue,這將跳過循環(huán)中剩余的代碼,直接進入下一次迭代。如果文件不是臨時文件,執(zhí)行文件處理的相關(guān)命令。continue語句示例continue語句示例,根據(jù)用戶輸入跳過循環(huán)迭代:#!/bin/bash#模擬的數(shù)據(jù)數(shù)組items=("item1""item2""item3""item4")#遍歷數(shù)組中的每個項foritemin"${items[@]}"doecho"Doyouwanttoprocess$item?(yes/no)"readanswerif[["$answer"!="yes"]];thenecho"Skipping$item"continue#跳過這個項的進一步處理

fi#如果用戶選擇繼續(xù),則處理該項

echo"Processing$item"#在這里添加實際處理邏輯doneforitemin“${items[@]}“用于循環(huán)遍歷一個數(shù)組中的所有元素。用戶每次迭代時都會被詢問是否要處理當前項。如果用戶回答不是"yes",則輸出跳過消息,并通過continue跳過當前循環(huán)的剩余部分。如果用戶選擇"yes",則執(zhí)行相關(guān)的處理命令。03exit語句exit語句在Shell腳本中,exit語句是一種控制腳本退出并明確指定退出狀態(tài)的有效方式,當執(zhí)行到exit語句時,腳本會立即停止,不再執(zhí)行后續(xù)的代碼。它允許腳本開發(fā)者向外部環(huán)境通報腳本的執(zhí)行結(jié)果,是錯誤處理和腳本控制流的重要組成部分。通過合理使用exit語句,可以確保腳本在遇到問題時能夠優(yōu)雅地終止,并提供關(guān)于發(fā)生問題的足夠信息。exit語句基本語法如下:exit[n]在上述語法中,n是一個整數(shù),表示腳本的退出狀態(tài)碼。通常,0表示腳本執(zhí)行成功,非零值表示不同的錯誤或異常情況。如果指定了n,則退出狀態(tài)碼為指定的值。exit語句示例exit語句示例,檢查用戶權(quán)限:#!/bin/bash#檢查是否以root用戶運行if[[$EUID-ne0]];thenecho"Thisscriptmustberunasroot."exit1fiecho"Runningasroot,continuewithscript."使用$EUID環(huán)境變量檢查當前用戶的有效用戶ID,如果不是0(root用戶的EUID),腳本打印錯誤消息并退出。exit1表示腳本因權(quán)限不足而失敗。如果用戶是root,腳本繼續(xù)執(zhí)行。exit語句示例exit語句示例,檢查用戶權(quán)限:#!/bin/bash#要檢查的文件路徑filename="/path/to/important/file.txt"#檢查文件是否存在if[[!-f"$filename"]];thenecho"Error:Filedoesnotexist."exit2fiecho"Fileexists,proceedingwithoperations."[[!-f"$filename"]]檢查指定路徑的文件是否存在。如果文件不

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論