Shell 學習筆記四(迴圈語句)

2021-06-22 00:31:30 字數 2186 閱讀 4412

shell常用的迴圈語句包括 for迴圈 、while迴圈 、until迴圈。這節主要對這幾種迴圈語句的講解。

for迴圈一般格式為:

for 變數名 in 列表

docommand1

command2

...commandn

done

當變數值在列表裡,for迴圈即執行一次所有命令,使用變數名獲取列表中的當前取值。命令可為任何有效的shell命令和語句。in列表可以包含替換、字串和檔名。

例如,順序輸出當前列表中的數字:

for loop in 1 2 3 4 5

do echo "the value is: $loop"

done

遍歷一維陣列:

#! /bin/bash

arr=(1 2 3 4 5 6)

for data in $

do

echo $

done

while迴圈用於不斷執行一系列命令,也用於從輸入檔案中讀取資料;命令通常為測試條件。其格式為:

while 命令

do command1

command2

...commandn

done

命令執行完畢,控制返回迴圈頂部,從頭開始直至測試條件為假。

以下是乙個基本的while迴圈,測試條件是:如果int小於5,那麼條件返回真。int從0開始,每次迴圈處理時,int加1。執行上述指令碼,返回數字0到4,然後終止。

#!/bin/bash

int=0

while (($int<5))

do echo $int

let "int++"

done

while迴圈可用於讀取鍵盤資訊。下面的例子中,輸入資訊被設定為變數film,按結束迴圈。

echo 'type to terminate'

echo -n 'enter your most liked film:' ""

while read keybord

do echo "yeah! great film the $keybord"

done

until迴圈執行一系列命令直至條件為真時停止。until迴圈與while迴圈在處理方式上剛好相反。一般while迴圈優於until迴圈,但在某些時候—也只是極少數情況下,until迴圈更加有用。

until 條件

command1

command2

...commandn

done

在迴圈過程中,有時候需要在未達到迴圈結束條件時強制跳出迴圈,shell使用兩個命令來實現該功能:break和continue。

break命令

break命令允許跳出所有迴圈(終止執行後面的所有迴圈)。

#!/bin/bash  

for i in "a b c d"

do

echo "$i "

for j in `seq 10`

do

if [ $j -eq 5 ];then

break

fi

echo "$j "

done

done

continue命令

continue命令與break命令類似,只有一點差別,它不會跳出所有迴圈,僅僅跳出當前迴圈。

#!/bin/bash

while :

doecho -n "input a number between 1 to 5: "

read anum

case $anum in

1|2|3|4|5) echo "your number is $anum!"

;;*) echo "you do not select a number between 1 to 5!"

continue

echo "game is over!"

;;esac

done

Shell學習(四)迴圈語句while

迴圈語句while 表示式while 條件語句 do語句1 done案例一 while條件判斷數字 bin sh i 1 while i lt 10 doecho i i done案例二 while逐行讀取某個檔案 bin sh while read line doecho line done ro...

JAVA學習筆記 四 迴圈語句

while迴圈 while迴圈 迴圈變數,可以控制迴圈次數。public class test system.out.println count system.out.println hahahhaa while迴圈 實現1 100之和 public class test system.out.pr...

Shell學習筆記 迴圈

迴圈 主要有三種方式 for while until for迴圈 從序列中一一取出字元放入執行的變數中,然後重複執行do 到done之間的命令,知道所有元素取完。語法結構 for 變數 in 序列 do cmd done例子 bin bash for k in seq 1 10 do mkdir h...