1.基本語法
for循環通常用於將一組語句執行已知的次數,基本語法是:
for var in {start...end...step}
do
str1
str2
...
done
var是變量,{}整體上是一個列表,start代表列表的初始數值,end代表結束的數值,step代表步長,如{1..10..2}的意思是從1開始,到10結束,每兩步輸出一次,即1,3,5,7,9
do和done之間的所有語句稱為循環體,也就是在循環過程中,我們要真正執行的語句,具體執行多少次得看{}中的元素個數
實例1,以步長為2,求100以內奇數相加的和
#!/bin/bash
sum=0
for i in {1..100..2}
do
let "sum+=i" 等同於:sum=sum+i
done
echo "一百以內奇數相加的和為: $sum "
輸出結果:
實例2:列出當前目錄所有文件
#!/bin/bash
for file in * *等同於ls * 即列出當前目錄所有文件
do
echo "$file"
done
輸出結果:
實例3.for循環還有一個重要的作用就是輸出腳本的參數,例如輸入參數1-9,給每個參數加1后輸出
#!/bin/bash
echo "$*"
for sum in $*
do
let "sum+=1"
echo "$sum"
done
輸出結果為:
2.不帶列表的for循環
在特殊情況下for循環可以不帶條件列表,由shell直接從命令行中獲取列表
實例4
#!/bin/bash
for sum
do
let "sum+=2"
echo "加2后為:$sum"
done
結果為:
這種寫法每次都還在命令行交互,所以一般不用。
3.C語言式for循環
Linux因為是用C語言開發的,大部分人都或多或少的接觸過C語言,所以bash也支持類C語言的for循環語句,基本語法為:
for ((x;y;z))
do
statement1;
statement2;
.....
done
x一般表示變量初始值,y即決定循環的條件,返回值為0時,進行循環,非0時,退出循環;z表示改變變量的條件,例如自增自減....
實例5:
#!/bin/bash
for (( i=1;i<=5;i++))
do
echo "這是第 $i 次循環"
done
i的值為1,i小於等於5,i每循環一次加一,即i循環五次,每次在前一次的基礎上加1,也就是輸出:1,1+1,2+1,3+1,4+1,(5+1=6大於5了,返回值就非0,不輸出)如圖
條件缺省
和C語言一樣,在shell中也可以將for循環條件中的的任意部分省略掉,也可以全部省略,為了方便演示就用上面的代碼了
第一種,缺省初始變量
#!/bin/bash
for ((;i<=5;i++))
do
echo "這是第 $i 次循環"
done
輸出結果為:
也就是說,即使沒加初始變量,shell把他當成空,還是會進行計算,步驟就變成了:空加1,1+1,2+1,3+1,4+1。循環了六遍
第二種,缺省變量條件限制
#!/bin/bash
for ((;;i++))
do
echo "這是第 $i 次循環"
done
結果如下,停止時因為我ctrl+c結束了這個進程,因為沒加結束條件,理論上他自己是永遠不會停止循環的。(所以我們要加條件就是讓腳本達到需求后就退出循環)
第三種,缺省了變化條件,可想而知,也就是進行不變化的循環
使用c循環要特別注意退出循環的條件,一不小心就會變成死循環。
4.遍歷數組
shell為遍歷數組提供一種特別的寫法:
for var in ${array[*]}
do
statement1
statement2
done
var是變量,array是數組名,statement是達到目的后循環的條件。在遍歷的過程中,for循環語句會將每個數組元素的值賦給變量var。
舉個例子:
#!/bin/bash
array=("周一" "周二" "周三" "周四" "周五" "周六" "周日")
for day in ${array[*]}
do
echo "$day"
done
循環結果為: