linux腳本打印循環次數,shell腳本編程基礎(3)——循環用法

本節索引:

一、if、case條件判斷

二、for、while及until循環

三、循環控制語句continue、break、shift及select菜單

四、信號捕捉trap

在前面的基礎編程內容中,我們已經學習了shell腳本的順序執行及選擇執行,通過這兩種方式,可

以幫我們解決一些簡單需求,但要想在更復雜的場景中使用的話,就需要掌握循環執行的方式了。

3c8ce6380daa33c267ccb0e2e66a02de.png

一、if、case條件判斷

條件判斷if語句:

if語句是指編程語言中用來判定所給定的條件是否滿足,根據判定的結果(真或假)決定執行

給出的兩種操作之一。

格式:

if? 判斷條件1;then

條件1為真的分支代碼

elif判斷條件2;then

條件2為真的分支代碼

elif 判斷條件3;then

條件3為真的分支代碼

else

以上條件都不滿足的分支代碼

fi

if語句會逐條件的進行判斷,當第一次遇到為“真”的條件時,就會執行其分支代碼,而后結束整個if語句。

條件判斷case語句:

case語句是實現選擇結構程序設計的一種語句,比較適合處理離散型變量。

格式:

case 變量引用 in

1|2|3)

cmd1

;;

4|5|6)

cmd2

;;

7|8|9)

cmd3

;;

*)

cmd4

esac

注意:case支持glob風格的通配符:

如:*????? 表示任意長度任意字符

???? 表示任意單個字符

[]????? 指定范圍內的任意單個字符

a|b??? a或者b

二、for、while及until循環

循環執行

將某代碼段重復運行多次

重復運行多少次

次數已知

次數未知

有進入條件和退出條件

循環主要語句有:for、whlie、until

for循環

for語句將循環一個列表中的每一個元素執行一次循環體代碼,直到列表中元素全部執行過一次。

一般用于次數預先知道的循環。

格式1:

for 變量名 in 列表;do

循環體

done

其中列表的生成方式有多種:

1.直接給出列表

2.整數列表:

(a){start..end[..step]}

(b)$(seq[start[step]end])

3.返回列表的命令:

$(COMMAND)

4.使用glob,如:*.sh

5.變量引用:

$@,$*等

執行機制:

依次將列表中的元素賦值給“變量名”,每次賦值后即執行一次循環體;直到列表中的

元素全部被執行,循環結束

格式2:C語言風格

for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done

Arithmetic for loop.

Equivalent to

(( EXP1 ))

while (( EXP2 )); do

COMMANDS

(( EXP3 ))

done

例:利用for循環依次讀取列表{1..100}中的內容,并相加,得出1到100的數字之和

3c8ce6380daa33c267ccb0e2e66a02de.png

while循環

while結構循環為當型循環(when type loop),一般用于不知道循環次數的情況。維持循環的是一個條件表達式,條件成立執行循環體,條件不成立退出循環。

格式:

while 循環控制條件;do

循環體

done

循環控制條件:進入循環之前,先做一次判斷;每次循環之后會再次做判斷;當條件為True時,則繼續執行循環;直到條件測試狀態為false時終止循環。

例:利用while循環,定義變量i=0,當i小于100時,執行循環,并讓變量i每執行一次循環加1,直到i=100時停止循環,得出數字1到100之和

3c8ce6380daa33c267ccb0e2e66a02de.png

while循環的特殊用法(遍歷文件的每一行):

while read line; do

循環體

done < /PATH/FROM/SOMEFILE

依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line

for循環與while循環的區別:

for循環與while循環是可以相互替代的;比如:

for i in {1..10};do

echo “OK”

done

用while語句來寫的話:

i=1

while [ $i -le 10 ];do

echo “OK”

let i++

done

兩者意思都是打印10次“OK”,那什么時候用for循環,什么時候又用while循環呢?

for循環用于針對集合中的每個元素的一個代碼塊,而while循環不斷的運行,直到指定的條件不滿足為止。

一般來說:

for循環比較適合循環次數確定的情況

while循環適合循環次數不確定的情況

until循環

維持循環的也是一個條件表達式,但與while用法正好相反,條件不成立時執行循環體,條件成立時退出循環。

until 循環控制條件;do

循環體

done

until語句和while語句可相互轉化:

如:until [ test ];do? 等價于 while [ ! test ];do

三、循環控制語句continue、break、shift

continue語句

用于循環體中

continue[N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層

格式:

while 循環控制條件;do

CMD1

if 判斷條件;then

continue

fi

CMDn

done

例:依次打印數字1至10,當continue出現在5循環中時,直接跳過,繼續執行6循環;

當continue出現在嵌套循環中時,continue 2,提前結束第二次本輪循環,并打印3次

3c8ce6380daa33c267ccb0e2e66a02de.png

break語句

用于循環體中

break[N]:提前結束第N層循環,最內層為第一層

while 循環控制條件;do

CMD1

if 判斷條件;then

break

fi

CMDn

done

例:break語句將直接結束本輪循環

3c8ce6380daa33c267ccb0e2e66a02de.png

shift命令

shift[n]:將參量列表list左移指定次數,缺省為左移一次,適合用于處理位置參數

參量列表list一旦被移動,最左端的那個參數就從列表中刪除。while循環遍歷位置參量列表時,

常用到shift

例1:利用shifit,每次位置變量向左移動1位,并打印本次全部位置變量,直到位置變量為0個

3c8ce6380daa33c267ccb0e2e66a02de.png

例2:利用shifit,每次變量向左移動一位,并打印本次第一個位置變量,直到位置變量小于1時停止執行

3c8ce6380daa33c267ccb0e2e66a02de.png

避免出現無限循環:

while true;do

循環體

done

until false;do

循環體

done

每個程序員都會偶爾不小心而編寫出無限循環,在循環退出條件比較微妙時尤其如此,如果程序陷入無限循環,可按ctrl+c退出

要避免編寫無限循環,務必對每個while、until循環進行測試,確保它按預期那樣結束。

select循環與菜單

select 變量 in list;do

循環體命令

done

select循環主要用于創建菜單,常與case語句搭配使用,用戶輸入菜單列表中的某個數字,執行相應的命令

select是個無限循環,因此要記住用break命令退出循環,或用戶exit命令終止腳本。可按ctrl+c退出循環

與for循環類似,可以省略in list,此時使用位置變量。

相關變量:

$PS3 ?????? menu菜單提示符

$REPLY?? 保存用戶的輸入信息

四、信號捕捉trap

trap‘觸發指令’信號

自定義進程收到系統發出的指定信號好,將執行觸發指令,而不會執行原操作

trap” 信號

忽略信號的操作

trap‘-‘ 信號

恢復原信號的操作

trap -p

列出自定義信號操作

例:打印數字1到10的過程中,trap -p顯示自定義信號操作,由于trap ”int捕獲了int信號,ctrl+c無法中斷顯示,且顯示自定義輸入:press ctrl+c;

打印數字11到20的過程中,由于trap ”int捕獲了int信號,ctrl+c無法中斷顯示

打印數字21到30的過程中,trap ‘-‘恢復了原信號操作,顧ctrl+c又可中斷顯示

3c8ce6380daa33c267ccb0e2e66a02de.png

3c8ce6380daa33c267ccb0e2e66a02de.png

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.178linux.com/97879

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282860.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282860.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282860.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RTSP服務器之————rtsp-server(輕量級RTSP / RTP流媒體服務器)

github&#xff1a;https://github.com/revmischa/rtsp-server 輕量級RTSP / RTP流媒體服務器

EF CORE 7 中的新功能:使用 ExecuteDelete 和 ExecuteUpdate 進行批量操作

原文鏈接&#xff1a;https://timdeschryver.dev/blog/new-in-entity-framework-7-bulk-operations-with-executedelete-and-executeupdate原文作者&#xff1a;tim_deschryver翻譯&#xff1a;沙漠盡頭的狼(谷歌翻譯加持)Entity Framework 7 包括一些已被要求的流行功能&#…

java 簡單json和對象相互轉換

2019獨角獸企業重金招聘Python工程師標準>>> package Fasterxml; import com.fasterxml.jackson.databind.ObjectMapper; import mode.User; import java.io.StringWriter; import java.util.ArrayList; import java.util.List;/*** maven...**<dependency>* …

暢想動畫制作的樂趣

為什么要制作動畫&#xff1f; 現在的營銷活動&#xff0c;用一個很簡單的圖片去吸引消費者已經遠遠不夠。想讓消費者創造GMV&#xff0c;肯定需要讓消費者覺得眼前一亮或是有視覺沖擊的東西&#xff0c;或者在動畫過程中提供更好的引導部分&#xff0c;比如紅包&#xff0c;引…

Linux的scan命令,linux的scan命令

linux下scan命令主要是以scanf的形式使用轉換符解析字符串&#xff0c;下面由秋天網 Qiutian.ZqNF.Com小編為大家整理了linux下scan命令的相關知識&#xff0c;希望對大家有幫助!linux的scan命令詳解scan - 以sscanf的形式使用轉換符解析字符串語法:scan string format ?varna…

Spring Cloud Gateway 原生支持接口限流該怎么玩

關于pig&#xff1a; 基于Spring Cloud、oAuth2.0開發基于Vue前后分離的開發平臺&#xff0c;支持賬號、短信、SSO等多種登錄&#xff0c;提供配套視頻開發教程。 關于 Spring Cloud Gateway SpringCloudGateway是Spring官方基于Spring 5.0&#xff0c;Spring Boot 2.0和Projec…

我的手機 不支持箭頭函數

不支持&#xff0c;要換成function的形式 轉載于:https://www.cnblogs.com/web-fusheng/p/7295901.html

中標麒麟linux卸載qt,國產化 銀河麒麟編譯Qt程序的問題匯總 | 阿拉燈

Run in terminal莫名奇妙軟件無法在QtCreator中運行或者調試&#xff0c;main函數都無法進入&#xff0c;QtCreator中一運行就崩潰&#xff0c;并跳到匯編界面&#xff0c;這多半和代碼沒什么關系&#xff0c;我這里是將項目->運行中的“Run in terminal”去掉勾選&#xff…

css3-13 如何改變文本框的輪廓顏色

css3-13 如何改變文本框的輪廓顏色 一、總結 一句話總結&#xff1a;outline使用和border很像&#xff0c;幾乎一模一樣&#xff0c;多了一個offset屬性 1、輪廓outline如何使用&#xff1f; 使用和border很像&#xff0c;幾乎一模一樣&#xff0c;多了一個offset屬性 18 …

ios添加設備真機測試,以及Undefined symbols for architecture x86_64:''錯誤

問題今天坑了好久&#xff0c;然后找了各種資料 添加設備這個直接去開發者中心添加一個設備進去就好&#xff0c;具體流程百度&#xff0c;第二個問題是屬于路徑不對或者是靜態庫沒有添加成功&#xff0c;項目可以看到&#xff0c;到時路徑找不到&#xff0c;你把靜態庫拖到桌面…

linux NF NR實例,awk內建變量示例詳解之NR、FNR、NF

NR表示從awk開始執行后&#xff0c;按照記錄分隔符讀取的數據次數&#xff0c;默認的記錄分隔符為換行符&#xff0c;因此默認的就是讀取的數據行數&#xff0c;NR可以理解為Number of Record的縮寫。在awk處理多個輸入文件的時候&#xff0c;在處理完第一個文件后&#xff0c;…

迷宮探索

/* 5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 4 3 */#include<iostream>using namespace std;struct node {int x;//橫坐標int y;//縱坐標int f;//父親在隊列中的編號int s;//步數 };int main() {node que[2051];int a[51][51]{0};int book[51][51]{0};//定義一…

Kinect2.0獲取數據

最近事情真是多&#xff0c;今天抽空研究一下Kinec2.0的數據獲取&#xff01; 系統要求 https://developer.microsoft.com/en-us/windows/kinect/hardware-setup 系統環境 聯想Y430P&#xff0c;Windows10 首先安裝了Kinect for Windows SDK &#xff08;KinectSDK-v2.0_1409-S…

linux超級工具,linux運維超級工具--sysdig

sysdig 是一個超級系統工具,它可以用來捕獲系統狀態信息&#xff0c;在運維工作中sysdig能很方便的排查異常、定位故障&#xff0c;它還能保存數據進行分析&#xff0c;并且提供強大的命令接口。在了解sysdig強大之處之前,首先得安裝sysdig&#xff0c;我這里是環境是centos6.7…

《sql語句練習1》

Oracle系列《一》&#xff1a;簡單SQL與單行函數 使用scott/tiger用戶下的emp表和dept表完成下列練習&#xff0c;表的結構說明如下 emp員工表(empno員工號/ename員工姓名/job工作/mgr上級編號/hiredate受雇日期/sal薪金/comm傭金/deptno部門編號) dept部門表(deptno部門編號…

Asp.net mvc 知多少(一)

本系列主要翻譯自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan&#xff0c;想看英文原版的可訪問http://www.dotnettricks.com/free-ebooks自行下載。該書主要分為兩部分&#xff0c;ASP.NET MVC 5、ASP.NET WEB API2。本書最大的特點是以面試問答…

stm32h7能跑linux,STM32H7榨干了Cortex-M7的最后一滴血

原標題&#xff1a;STM32H7榨干了Cortex-M7的最后一滴血有個非常重磅的消息ST給自己的STM32家族又新增了一條新的產品線—— H7H 代表的是High Pefrmance之意 (此為筆者臆測)7 則表示這是基于ARM Cortex-M7架構修改而來熟悉的工程師可能會問&#xff0c;不是已經有基于M7架構的…

通過PowerShell進行網絡分析

好久沒有寫文章&#xff0c;因為確實工作也比較忙。今天周末&#xff0c;稍微有些時間&#xff0c;在解決一個問題時&#xff0c;用到了一點抓取和處理網絡數據的小技巧&#xff0c;摘錄分享如下。問題描述我有一個需求&#xff0c;就是要研究某個網頁加載過程中具體發起了多少…

jvm監控調優常用命令

jvm監控調優常用命令 轉載于:https://www.cnblogs.com/likun10579/p/6403324.html

【BZOJ】1013 球形空間產生器

【解析】代數變形高斯消元 [分析] 依據題目以下的提示。設x[i][j]表示第i個點在第j維的坐標。r[j]為圓心在第j維的坐標 能夠知道&#xff1a; dis根號(∑(x[i][j]-r[j])^2)。 因為平方的非負性。所以能夠推出 dis^2∑(x[i][j]-r[j])^2。 依據平方和公式&#xff0c;(x[i][j]-r[…