<Linux>流程控制——迴圈(for/while/until/select)
阿新 • • 發佈:2021-05-30
一、for迴圈(foreach型)語法
for var in list
#每一次迴圈,依次把列表list中的一個值賦給迴圈變數
do #迴圈體開始標誌
cmd #迴圈變數每取一次值,迴圈體就執行一次
done #迴圈體結束標誌,返回迴圈頂部
說明
- 首先
list
可以是命令替換
、變數名替換
、字串
和檔名列表(可包含萬用字元)
,每個列表項以空格間隔 for
迴圈執行的次數取決於列表list中單詞的個數- 可以省略
in list
,此時預設值為in [email protected]
舉例
例1 比較引數在不在引號中
#!bin/bash
for x in centos ubuntu gentoo opensuse
do
echo $x
done
for x in "centos ubuntu gentoo opensuse"
do
echo $x
done
for x in centos ubuntu gentoo opensuse
,這裡是4個引數
for x in "centos ubuntu gentoo opensuse"
,而這個只有一個引數,就是"centos ubuntu gentoo opensuse"
執行結果
例2 比較變數是否在引號中
#!bin/bash
i=1; weekdays="Mon Tue Wed Thu Fri"
for day in $weekdays
do
echo "weekday $((i++)) : $day"
done
echo -e "\n"
j=1
for day in "$weekdays"
do
echo "weekday $((j++)) : $day"
done
執行結果
若把變數放在引號中,則直接作為一個整體,將整體作為一個引數
例3 實現將當前目錄下所有以.c 為字尾的檔案改寫為以.sh為字尾的檔案
#!bin/bash
for file in *.c
do
rename .c .sh $file
done
執行該shell程式前,當前目錄下的檔案為
執行後
break和continue
break [n]
- 用於強制退出當前迴圈
- 如果是巢狀迴圈,則break命令後面可以跟著一個數字n,表示退出第n重迴圈(最裡面那層為第一層迴圈)
continue [n]
- 用於忽略本次迴圈的剩餘部分,回到迴圈開始位置,進入下一次迴圈
- 如果是巢狀迴圈,可以在continue後面加一個數字n,表示回到第n重迴圈的頂部
舉例
例1
#!bin/bash
list="1 2 3 4 5 6 7 8 9 10"
res=0
for i in $list
do
if [ $res -le 30 ]
then
(( res =$res + $i ))
else
break
fi
done
echo "res= $res"
這裡是讓res的值超過30就跳出迴圈,需要注意的是,進行求和時,整個表示式是在(())
裡面的,而不是res = (( $res + $i ))
執行結果為
res=36
二、for迴圈(C語言型)語法
for ((expr1;expr2;expr3)) #執行expr1
do #若expr2的值為真,則進入迴圈體
cmd1 #執行迴圈體,執行結束後執行expr3
done #迴圈結束,返回迴圈頂部
說明
(1)通常expr1和epxr3是算數表示式,expr2的邏輯表示式
(2)expr1僅僅在迴圈開始初執行一次
(3)expr2每次迴圈開始前都需要判斷條件是否為真
(4)expr3在每次執行迴圈結束後執行一次
舉例 實現求和功能(使用者輸入大於1的數,求從1到輸入數的和)
#!bin/bash
read -p "Input a number: " num
res=0
for((i=0;(( i<=$num ));(i++)))
do
((res = $res + i))
done
echo "sum= $res"
執行結果
三、while迴圈語句
語法
while expr #執行expr
do
cmd
done
舉例 實現求和功能(使用者輸入大於1的數,求從1到輸入數的和)
#!bin/bash
read -p "Input a num: " num
res=0
i=0
while (( i<=num ))
do
(( res=res+i ))
(( i++ ))
done
echo "sum=$res"
執行結果
四、until迴圈語句
語法
util expr #expr非0,則進入迴圈
do
cmd
done
舉例 實現求和功能(使用者輸入大於1的數,求從1到輸入數的和)
#!bin/bash
read -p "Input a num: " num
res=0
i=0
until (( i>num ))
do
(( res=res+i ))
(( i++ ))
done
echo "sum=$res"
執行結果
while
和until
的區別在於
while
想要執行其迴圈體,則while的條件expr
得為真
until
想要執行其迴圈體,則until的條件expr
得為假
五、select
#!/bin/bash
## filename: select-1.sh
PS3="What is your preferred scripting language? "
select s in bash perl python ruby quit
do
case $s in
bash|perl|python|ruby) echo "You selected $s" ;;
quit) break ;;
*) echo "You selected error , retry …" ;;
esac
done