新聞中心

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比雞冠網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式雞冠網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋雞冠地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
C語言風格的 for 循環(huán)
C語言風格的 for 循環(huán)的用法如下:
for((exp1; exp2; exp3))
do
statements
done
幾點說明:
- exp1、exp2、exp3 是三個表達式,其中 exp2 是判斷條件,for 循環(huán)根據(jù) exp2 的結果來決定是否繼續(xù)下一次循環(huán);
- statements 是循環(huán)體語句,可以有一條,也可以有多條;
- do 和 done 是 Shell 中的關鍵字。
它的運行過程為:
1) 先執(zhí)行 exp1。
2) 再執(zhí)行 exp2,如果它的判斷結果是成立的,則執(zhí)行循環(huán)體中的語句,否則結束整個 for 循環(huán)。
3) 執(zhí)行完循環(huán)體后再執(zhí)行 exp3。
4) 重復執(zhí)行步驟 2) 和 3),直到 exp2 的判斷結果不成立,就結束循環(huán)。
上面的步驟中,2) 和 3) 合并在一起算作一次循環(huán),會重復執(zhí)行,for 語句的主要作用就是不斷執(zhí)行步驟 2) 和 3)。
exp1 僅在第一次循環(huán)時執(zhí)行,以后都不會再執(zhí)行,可以認為這是一個初始化語句。exp2 一般是一個關系表達式,決定了是否還要繼續(xù)下次循環(huán),稱為“循環(huán)條件”。exp3 很多情況下是一個帶有自增或自減運算的表達式,以使循環(huán)條件逐漸變得“不成立”。
for 循環(huán)的執(zhí)行過程可用下圖表示:
下面我們給出一個實際的例子,計算從 1 加到 100 的和。
#!/bin/bash
sum=0
for ((i=1; i<=100; i++))
do
((sum += i))
done
echo "The sum is: $sum"
運行結果:
The sum is: 5050
代碼分析:
1) 執(zhí)行到 for 語句時,先給變量 i 賦值為 1,然后判斷 i<=100 是否成立;因為此時 i=1,所以 i<=100 成立。接下來會執(zhí)行循環(huán)體中的語句,等循環(huán)體執(zhí)行結束后(sum 的值為1),再計算 i++。
2) 第二次循環(huán)時,i 的值為2,i<=100 成立,繼續(xù)執(zhí)行循環(huán)體。循環(huán)體執(zhí)行結束后(sum的值為3),再計算 i++。
3) 重復執(zhí)行步驟 2),直到第 101 次循環(huán),此時 i 的值為 101,i<=100 不再成立,所以結束循環(huán)。
由此我們可以總結出 for 循環(huán)的一般形式為:
for(( 初始化語句; 判斷條件; 自增或自減 ))
do
statements
done
for 循環(huán)中的三個表達式
for 循環(huán)中的 exp1(初始化語句)、exp2(判斷條件)和 exp3(自增或自減)都是可選項,都可以省略(但分號
;必須保留)。
1) 修改“從 1 加到 100 的和”的代碼,省略 exp1:
#!/bin/bash
sum=0
i=1
for ((; i<=100; i++))
do
((sum += i))
done
echo "The sum is: $sum"
可以看到,將
i=1移到了 for 循環(huán)的外面。
2) 省略 exp2,就沒有了判斷條件,如果不作其他處理就會成為死循環(huán),我們可以在循環(huán)體內部使用 break 關鍵字強制結束循環(huán):
#!/bin/bash
sum=0
for ((i=1; ; i++))
do
if(( i>100 )); then
break
fi
((sum += i))
done
echo "The sum is: $sum"
break 是 Shell 中的關鍵字,專門用來結束循環(huán),后續(xù)章節(jié)還會深入講解。
3) 省略了 exp3,就不會修改 exp2 中的變量,這時可在循環(huán)體中加入修改變量的語句。例如:
#!/bin/bash
sum=0
for ((i=1; i<=100; ))
do
((sum += i))
((i++))
done
echo "The sum is: $sum"
4) 最后給大家看一個更加極端的例子,同時省略三個表達式:
#!/bin/bash
sum=0
i=0
for (( ; ; ))
do
if(( i>100 )); then
break
fi
((sum += i))
((i++))
done
echo "The sum is: $sum"
這種寫法并沒有什么實際意義,僅僅是為了給大家做演示。
Python 風格的 for in 循環(huán)
Python 風格的 for in 循環(huán)的用法如下:
for variable in value_list
do
statements
done
variable 表示變量,value_list 表示取值列表,in 是 Shell 中的關鍵字。 每次循環(huán)都會從 value_list 中取出一個值賦給變量 variable,然后進入循環(huán)體(do 和 done 之間的部分),執(zhí)行循環(huán)體中的 statements。直到取完 value_list 中的所有值,循環(huán)就結束了。
Shell for in 循環(huán)舉例:
#!/bin/bash
sum=0
for n in 1 2 3 4 5 6
do
echo $n
((sum+=n))
done
echo "The sum is "$sum
運行結果:
1
2
3
4
5
6
The sum is 21
對 value_list 的說明
取值列表 value_list 的形式有多種,你可以直接給出具體的值,也可以給出一個范圍,還可以使用命令產(chǎn)生的結果,甚至使用通配符,下面我們一一講解。
1) 直接給出具體的值
可以在 in 關鍵字后面直接給出具體的值,多個值之間以空格分隔,比如
1 2 3 4 5、
"abc" "390" "tom"等。
上面的代碼中用一組數(shù)字作為取值列表,下面我們再演示一下用一組字符串作為取值列表:
#!/bin/bash
for str in "C語言中文網(wǎng)" "http://c.biancheng.net/" "成立7年了" "日IP數(shù)萬"
do
echo $str
done
運行結果:
C語言中文網(wǎng)
http://c.biancheng.net/
成立7年了
日IP數(shù)萬
2) 給出一個取值范圍
給出一個取值范圍的具體格式為:
{start..end}
start 表示起始值,end 表示終止值;注意中間用兩個點號相連,而不是三個點號。根據(jù)筆者的實測,這種形式只支持數(shù)字和字母。
例如,計算從 1 加到 100 的和:
#!/bin/bash
sum=0
for n in {1..100}
do
((sum+=n))
done
echo $sum
運行結果:
5050
再如,輸出從 A 到 z 之間的所有字符:
#!/bin/bash
for c in {A..z}
do
printf "%c" $c
done
輸出結果:
ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz
可以發(fā)現(xiàn),Shell 是根據(jù) ASCII 碼表來輸出的。
3) 使用命令的執(zhí)行結果
使用反引號
``或者
$()都可以取得命令的執(zhí)行結果,我們在《Shell變量》一節(jié)中已經(jīng)進行了詳細講解,并對比了兩者的優(yōu)缺點。本節(jié)我們使用
$()這種形式,因為它不容易產(chǎn)生混淆。
例如,計算從 1 到 100 之間所有偶數(shù)的和:
#!/bin/bash
sum=0
for n in $(seq 2 2 100)
do
((sum+=n))
done
echo $sum
運行結果:
2550
seq 是一個 Linux 命令,用來產(chǎn)生某個范圍內的整數(shù),并且可以設置步長,不了解的讀者請自行百度。
seq 2 2 100表示從 2 開始,每次增加 2,到 100 結束。
再如,列出當前目錄下的所有 Shell 腳本文件:
#!/bin/bash
for filename in $(ls *.sh)
do
echo $filename
done
運行結果:
demo.sh
test.sh
abc.sh
ls 是一個 Linux 命令,用來列出當前目錄下的所有文件,
*.sh表示匹配后綴為
.sh的文件,也就是 Shell 腳本文件。
4) 使用 Shell 通配符
Shell 通配符可以認為是一種精簡化的正則表達式,通常用來匹配目錄或者文件,而不是文本,不了解的讀者請猛擊《Linux Shell 通配符(glob 模式)》。
有了 Shell 通配符,不使用 ls 命令也能顯示當前目錄下的所有腳本文件,請看下面的代碼:
#!/bin/bash
for filename in *.sh
do
echo $filename
done
運行結果:
demo.sh
test.sh
abc.sh
5) 使用特殊變量
Shell 中有多個特殊的變量,例如 $#、$*、$@、$?、$$ 等(不了解的讀者請猛擊《Shell特殊變量》),在 value_list 中就可以使用它們。
#!/bin/bash
function func(){
for str in $@
do
echo $str
done
}
func C++ Java Python C#
運行結果:
C++
Java
Python
C#
其實,我們也可以省略 value_list,省略后的效果和使用
$@一樣。請看下面的演示:
#!/bin/bash
function func(){
for str
do
echo $str
done
}
func C++ Java Python C#
運行結果:
C++
Java
Python
C#
分享標題:Shellfor循環(huán)和forint循環(huán)詳解
標題來源:http://m.fisionsoft.com.cn/article/cdhcido.html


咨詢
建站咨詢
