成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Bash 初學(xué)者系列 8:bash 中的循環(huán)

系統(tǒng) Linux
循環(huán)是 bash 腳本中一個(gè)很重要的功能,用途廣泛。本篇文章我們介紹三種不同的循環(huán),然后利用循環(huán)遍歷數(shù)組。

for 循環(huán)

for 循環(huán)有兩種不同的寫法:

  • c 語(yǔ)言樣式的 for 循環(huán);
  • 列表中使用的 for 循環(huán)。

c 語(yǔ)言樣式的 for 循環(huán)

如果你熟悉 c 或者 c++等編程語(yǔ)言,那么對(duì)于如下循環(huán)應(yīng)該不會(huì)陌生:?

for ((initialize ; condition ; increment)); do    [COMMANDS]done

根據(jù)上述語(yǔ)法,我們寫一個(gè)例子,打印 Hello Friend 十次:?

for ((i = 0 ; i < 10 ; i++)); doecho "Hello Friend"done

上述代碼中,首先將整型變量 i 初始化為 0,然后設(shè)置循環(huán)條件(i<10),如果條件為真,則執(zhí)行循環(huán),打印 Hello Friend,并將變量 i 遞增 1,然后進(jìn)行下一次循環(huán),知道 i<10不再滿足。?

$ bash hello.sh Hello FriendHello FriendHello FriendHello FriendHello FriendHello FriendHello FriendHello FriendHello FriendHello Friend

列表中使用的 for 循環(huán)

列表循環(huán)是 for 循環(huán)的一種變體,這在處理列表或者數(shù)組的時(shí)候特別方便,其語(yǔ)法如下:?

for item in [LIST]; do    [COMMANDS]done

比如,我們重寫一下上面的那個(gè)例子:?

for i in {1..10}; doecho "Hello Friend"done

另一個(gè)例子,下面腳本 var.sh 將打印在 /var 目錄下的所有文件和目錄:?

#!/bin/bash
for i in /var/*; doecho $idone

執(zhí)行一下,其輸出如下:?

$ ./var.sh/var/backups/var/cache/var/crash/var/lib/var/local/var/lock/var/log/var/mail/var/metrics/var/opt/var/run/var/snap/var/spool/var/tmp

while 循環(huán)

while 循環(huán)是 bash 中另一個(gè)應(yīng)用很廣泛的循環(huán),其語(yǔ)法如下:?

while [ condition ]; do    [COMMANDS]done

作為演示,我創(chuàng)建一個(gè)名為 3x10.sh 的腳本,用于打印前10個(gè)3的倍數(shù):?

#!/bin/bash
num=1while [ $num -le 10 ]; doecho $(($numnum=$(($num+1))done

其執(zhí)行結(jié)果如下:?

$36912151821242730

上述腳本中,首先將變量 num 初始化為 1,然后設(shè)定循環(huán)條件為 num 小于或等于 10。在循環(huán)體中,打印 num 乘以 3,然后將 num 遞增 1。

until 循環(huán)

如果你有 c/c++ 編程背景,那你可能會(huì)不自覺的找 do-while 循環(huán)。但是,在 bash 中并不存在 do-while 循環(huán)。

bush 中存在另一種循環(huán),即 until 循環(huán),其與 while 循環(huán)具有相同的語(yǔ)法:?

until [ condition ]; doCOMMANDS]Done

until 循環(huán)與 while 循環(huán)之間的主要區(qū)別在于循環(huán)條件。當(dāng)循環(huán)條件為真時(shí),while 循環(huán)會(huì)繼續(xù),但是,當(dāng)循環(huán)條件為假時(shí),until 循環(huán)才會(huì)繼續(xù)。

比如上面我們寫的 3x10.sh 腳本,我們使用 until 循環(huán)來(lái)實(shí)現(xiàn),如下:?

#!/bin/bash
num=1until [ $num -gt 10 ]; doecho $(($numnum=$(($num+1))done

大家應(yīng)該可以注意到,上面的循環(huán)條件為 $num -gt 10,為前一個(gè)例子中 -le 的否定。

循環(huán)的具體應(yīng)用

上面我們介紹了 bash 中循環(huán)的用法,下面在實(shí)際例子中介紹一下循環(huán)的使用。

打印數(shù)組的內(nèi)容

在此之前,我們假定大家了解 ??bash 中的數(shù)組??

遍歷數(shù)組,for 循環(huán)通常是最首要的選擇。

如下腳本 prime.sh 中,將會(huì)遍歷并打印出數(shù)組中的所有元素:?

#!/bin/bash
prime=(2 3 5 7 11 13 17 19 23 29)for i in "${prime[@]}"; doecho $idone

執(zhí)行一下,結(jié)果如下:?

$ ./prime.sh2357111317192329

在循環(huán)中使用 break 和 continue

有時(shí)候我們可能希望提前退出循環(huán),或者跳過本次循環(huán)。那么此時(shí)需要分別使用 break continue

break 將會(huì)終止循環(huán),并將程序控制轉(zhuǎn)到循環(huán)后的下一個(gè)命令或指令。

比如,下面的循環(huán)只會(huì)打印從 1 到 3:

for ((i=1;i<=10;i++)); doecho $iif [ $i -eq 3 ]; thenbreakfidone

使用 continue 語(yǔ)句會(huì)跳過本次循環(huán),繼續(xù)執(zhí)行下次循環(huán)。比如,下面腳本 odd.sh 只會(huì)打印從 1 到 10 之間的奇數(shù),而跳過偶數(shù):

#!/bin/bashfor ((i=0;i<=10;i++)); doif [ $(($i % 2)) -ne 1 ]; thencontinuefiecho $idone

執(zhí)行結(jié)果如下:?

$ ./odd.sh13579

無(wú)限循環(huán)

無(wú)限循環(huán)是一個(gè)永遠(yuǎn)運(yùn)行的循環(huán),其循環(huán)條件始終為真。大多數(shù)情況下,無(wú)限循環(huán)是因?yàn)檫壿嬪e(cuò)誤造成的bug。

例如,有人可能希望創(chuàng)建一個(gè)循環(huán),以降序打印數(shù)字1到10,結(jié)果可能會(huì)錯(cuò)誤地創(chuàng)建以下無(wú)限循環(huán):?

for ((i=10;i>0;i++)); doecho $idone

上述錯(cuò)誤是將 i 遞增 1。要修復(fù)這個(gè)問題需要將遞增改為遞減 i--:?

for ((i=10;i>0;i--)); doecho $idone

在某些情況下,我們可能希望有意創(chuàng)建無(wú)限循環(huán),以等待系統(tǒng)滿足外部條件。如下所示:?

for ((;;)); do[COMMANDS]done

如果想要?jiǎng)?chuàng)建一個(gè)無(wú)限 while 循環(huán),可參考如下:?

while [ true ]; do    [COMMANDS]done
責(zé)任編輯:龐桂玉 來(lái)源: TIAP
相關(guān)推薦

2022-12-09 07:58:52

Bash條件語(yǔ)句

2022-11-30 07:47:00

Bash腳本

2022-12-08 12:05:03

Bash字符串

2022-12-02 14:30:24

Bash腳本數(shù)組

2022-12-01 08:10:49

Bash腳本參數(shù)

2022-12-14 10:08:00

BashLinux

2022-12-16 09:01:24

2022-12-07 07:43:21

2022-11-28 08:01:47

BashLinuxshell 腳本

2023-08-22 21:42:03

Bash函數(shù)

2011-06-17 15:32:28

Qt

2011-09-16 09:38:19

Emacs

2022-04-24 15:21:01

MarkdownHTML

2011-04-12 10:13:24

2009-11-13 15:46:25

Java多線程

2023-08-21 12:31:41

BashForWhile

2011-07-04 14:14:54

java

2009-09-28 09:45:00

CCNA學(xué)習(xí)經(jīng)驗(yàn)CCNA

2022-10-10 15:28:45

負(fù)載均衡

2015-07-20 13:56:59

SDN
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久久久国产精品久久 | 免费成人高清在线视频 | 国产精品成人一区二区三区 | 97色在线观看免费视频 | 欧美精品日韩精品国产精品 | 中文字幕成人av | .国产精品成人自产拍在线观看6 | 精品视频在线一区 | 欧美在线观看一区 | 久久精品一区二区三区四区 | 天堂一区 | 午夜视频一区二区三区 | 最近日韩中文字幕 | 久一久| 欧美一区成人 | 国产高清精品一区二区三区 | 7777在线| 一级电影免费看 | 国产午夜精品一区二区三区四区 | 亚洲激情专区 | 亚洲精品高清视频 | 亚洲免费在线观看av | 久久久成人动漫 | 最新免费黄色网址 | 狠狠插天天干 | 超碰在线人人干 | 亚洲国产成人精品女人久久久 | 成年人网站国产 | 欧美日韩成人一区二区 | 一区二区三区电影在线观看 | 日韩黄| 中文字幕亚洲视频 | 在线视频 中文字幕 | 久久亚洲高清 | 一区中文| 国产高清精品一区二区三区 | www.v888av.com| 黄色播放| 大陆一级毛片免费视频观看 | 99久久久无码国产精品 | 国产精品视频在线播放 |