1. 程式人生 > 其它 ><Linux>流程控制——迴圈(for/while/until/select)

<Linux>流程控制——迴圈(for/while/until/select)

一、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"

執行結果

在這裡插入圖片描述

whileuntil的區別在於

  • 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