自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Bash 基礎(chǔ)知識系列 #8:For、While 和 Until 循環(huán)

系統(tǒng) Linux
在 Bash 基礎(chǔ)知識系列的倒數(shù)第二章節(jié),學(xué)習(xí) for、while 和 until 循環(huán)。

循環(huán)是任何編程語言中的一個強(qiáng)大功能。如果你還不知道,循環(huán)其實(shí)是一種根據(jù)某些條件重復(fù)代碼的方式。

例如,想象一下你需要打印從 1 到 10 的數(shù)字。你可以使用 echo 命令寫十次,但那太原始了。你使用一個循環(huán),在 3 到 4 行代碼內(nèi),就能完成。

這是我能想到的最簡單的例子。我將在討論 Bash 循環(huán)時,分享一些實(shí)際有用的例子。

在 Bash 中有三種類型的循環(huán):

  • for
  • while
  • until

我將在教程中展示所有三種類型的循環(huán)。讓我們從最常見的一種開始。

Bash 中的 For 循環(huán)

以下是 Bash 中的 for 循環(huán)語法:

for arg in LIST; do
    commands
done

這里的 LIST 可能是一個數(shù)組或者一個項(xiàng)目列表。括號擴(kuò)展 也是進(jìn)行循環(huán)的常用手段。

考慮一下我在開始提到的最簡單的場景。讓我們使用 for 循環(huán)打印從 1 到 10 的數(shù)字:

#!/bin/bash
for num in {1..10}; do
    echo $num
done

如果你運(yùn)行它,你應(yīng)該會看到像這樣的輸出:

$ ./for-loop.sh
1
2
3
4
5
6
7
8
9
10

你也可以使用 for num in 1 2 3 4 5 6 7 8 9 10; do ,但是使用括號擴(kuò)展使得代碼看起來更短且更智能。

{..} 是用于擴(kuò)展模式的。你使用 {d..h} ,它等同于 d e f g h 。關(guān)于括號擴(kuò)展的更多信息,可以在這篇文章中找到。

在 Bash 中使用括號擴(kuò)展

?? 如果你熟悉 C 語言編程,你可能會喜歡在 bash 中使用 C 風(fēng)格的 for 循環(huán):

for ((i = 0 ; i < 10 ; i++)); do echo $i done

讓我們看另一個例子,顯示 Bash 數(shù)組 的所有內(nèi)容:

#!/bin/bash
distros=(Ubuntu Fedora Debian Alpine)
for i in "${distros[@]}"; do
    echo $i
done

如果你運(yùn)行腳本,它將顯示數(shù)組中定義的所有發(fā)行版:

Ubuntu
Fedora
Debian
Alpine

Bash 中的 While 循環(huán)

while 循環(huán)測試一個條件,然后只要條件為真,就繼續(xù)循環(huán)。

while [ condition ]; do
    commands
done

如果你考慮前一個例子,它可以使用 while 循環(huán)進(jìn)行重寫:

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

如你所見,你首先需要將變量 num 定義為 1,然后在循環(huán)體內(nèi),你增加 num 的值。只要 num 小于或等于 10,while 循環(huán)就會檢查條件并運(yùn)行腳本。

因此,現(xiàn)在運(yùn)行腳本將會顯示出和之前 for 循環(huán)中看到的完全相同的結(jié)果。

1
2
3
4
5
6
7
8
9
10

讓我們看另一個例子。這是一個 Bash 腳本,它接受一個數(shù)字作為參數(shù) 并顯示該表。

#!/bin/bash
echo "Table for $1 is:"
index=1
while [ $index -le 10 ]; do
    echo $(($1*$index))
    index=$(($index+1))
done

如果你對 $1 的使用感到困惑,它代表傳遞給腳本的第一個參數(shù)。更多的細(xì)節(jié)可以參考這個系列的 第三章。

如果你運(yùn)行這個腳本,它應(yīng)該會顯示以下的輸出:

$ ./table.sh 2
Table for 2 is:
2
4
6
8
10
12
14
16
18
20

Bash 中的 Until 循環(huán)

這是一個使用較少的循環(huán)格式。它的行為和 while 循環(huán)類似。這里的區(qū)別是,循環(huán)運(yùn)行直到它檢查的條件為真為止。意味著為了在循環(huán)中執(zhí)行代碼,[ ] 中的條件必須為假。

我馬上會解釋一下。讓我們先看一下它的語法。

until [ condition ]; do
    commands
done

現(xiàn)在,如果我要使用相同的示例,即使用 until 循環(huán)打印從 1 到 10 的數(shù)字,它看起來會是這樣:

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

區(qū)別在于條件;其余部分保持不變。

  • 當(dāng)變量 num 小于或等于 10 時,while 循環(huán)就會運(yùn)行。[ ] 中的條件必須為真,循環(huán)才會執(zhí)行。
  • 知道變量 num 變得大于 10 時,until 循環(huán)才會運(yùn)行。[ ] 中的條件必須為假,循環(huán)才會執(zhí)行。

這都是做同樣事情的兩種不同方式。while 更受歡迎,因?yàn)槟銜诖蠖鄶?shù)編程語言中找到類似 while 的循環(huán)語法。

??? 練習(xí)時間

那是有趣的。現(xiàn)在是做一些練習(xí)的時候了。

練習(xí) 1:編寫一個腳本,該腳本接受一個數(shù)字作為參數(shù)并打印其表格。如果腳本在沒有參數(shù)的情況下運(yùn)行,你的腳本還應(yīng)顯示一個消息。

預(yù)期輸出

$: ./table.sh
You forgot to enter a number
$: ./table.sh 3
3
6
9
12
15
18
21
24
27
30

練習(xí) 2 : 編寫一個腳本,列出目錄 /var 中的所有文件。

提示 : 對于循環(huán),使用 /var/* 作為 “列表”。

Bash 基礎(chǔ)知識系列即將結(jié)束。作為該系列的最后一章,你將在下周學(xué)習(xí)在 Bash 腳本中使用函數(shù)。敬請期待。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2023-08-22 21:42:03

Bash函數(shù)

2023-08-11 15:46:40

BashIf Else 語句

2023-07-17 14:29:01

Bash算術(shù)運(yùn)算

2023-07-20 15:37:50

Bash數(shù)組

2023-07-12 14:13:03

BashLinux

2023-02-25 16:33:12

Luawhile

2023-07-15 18:19:47

Bash參數(shù)

2023-07-30 09:50:51

Bash字符串

2022-12-13 12:55:15

Bash循環(huán)

2023-06-19 11:30:19

bashshell

2021-08-18 16:09:39

NestJS

2015-08-27 14:50:40

BISSIS

2023-08-31 11:41:08

2009-12-22 14:27:28

Cisco3600

2010-12-14 09:30:12

2020-09-30 09:47:17

架構(gòu)

2009-09-23 11:07:11

Hibernate基礎(chǔ)

2010-07-16 10:53:30

Perl基礎(chǔ)

2015-06-01 13:35:43

數(shù)據(jù)中心DCIM

2009-04-17 14:22:40

XPathXML基礎(chǔ)
點(diǎn)贊
收藏

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