Linux---shell編程總結之for循環、while循環,until循環(三)

1、for循環:for循環會將參數一個一個賦給變量var
for循環格式:

for var in 參數
do
	commands
done

例子:

for test in Nevada "New Hampshire" "New Mexico" "New York"
do
	echo "Now going to $test"
done

從變量讀取列表:

list="Alabama Alaska Arizona Arkansas Colorado"
list=$list" Connecticut"
for state in $list
do
	echo "Have you ever visited $state?"
done

從命令讀取值:

file="states"

for state in $(cat $file)
do
	echo "Visit beautiful $state"
done

2、IFS稱爲內部字段分隔符,shell腳本是通過這個來進行分割,默認會將空格、製表符和換行符爲分隔符
更改IFS字段分隔符:

file="states"

IFS=$'\n'
for state in $(cat $file)
do
	echo "Visit beautiful $state"
done

如果要指定多個IFS字符,格式如:

IFS=$’\n’:;
IFS定義字符解析沒有任何限制

3、C語言風格的for循環:

for (( var assigment ; condition ; iteration process ))

例子:

for (( i=1; i <= 10; i++ ))
do
	echo "The next number is $i"
done

定義多個變量(判斷結束條件只能有一個):

for (( a=1, b=10; a <= 10; a++, b-- ))
do
	echo "$a-$b"
done

4、while循環只要判斷式爲真就執行
格式:

while [ 判斷式 ]
do
	commands
done

例子:

var1=10
while [ $var1 -gt 0 ]
do
	echo $var1
	var1=$[ $var1 - 1 ]
done

5、until循環:只要判斷式爲假就執行
格式:

until [ 判斷式 ]
do
	command
done

例子:

var1=100

until [ $var1 -eq 0 ]
do
	echo $var1
	var1=$[ $var1 - 25 ]
done

6、嵌套循環:
例子:

for (( a = 1; a <= 3; a++ ))
do
	echo "Starting loop $a:"
	for (( b = 1; b <= 3; b++ ))
	do
		echo "Inside loop $b:" 
	done
done

循環處理/etc/passwd:

IFS.OLD=$IFS
IFS=$'\n'
for entry in $(cat /etc/passwd)
do
	echo "Value is $entry"
	IFS=:
	for value in $entry
	do
		echo " $value"
	done
done

提供另一個命令:cut,-d:指定分隔符,-f:指定第幾列,-b 表示字節,-c 表示字符,默認分隔符爲製表符
例如:cut -d : -f 2 /etc/passwd cut -d : -b 1-5 /etc/passwd
7、退出循環break命令:用於跳出循環
例子:

for var1 in 1 2 3 4 5 6 7 8 9 10
do
	if [ $var1 -eq 5 ]
	then
		break
	fi
	echo "Iteeration number: $var1"
done
echo "The for loop is completed"

break後面還可以接數字,代表停止的循環層級
例子:

for (( a=1; a<4; a++ ))
do
	echo "Outer loop $a"
	for (( b=1; b<100; b++ ))
	do
		if [ $b -gt 4 ]
		then
			break 2
		fi
		echo " Inner loop: $b"
	done
done

8、暫停某次循環continue
例子:

for (( var1=1; var1<15; var1++ ))
do
	if [ $var1 -gt 5 ] && [ $var1 -lt 10 ]
	then
		continue
	fi
	echo "Iteration number: $var1"
done

continue後接數字也是和break一樣
例子:

for (( a = 1; a <= 5; a++ ))
do
	echo "Iteration $a:"
	for (( b = 1; b < 3; b++ ))
	do
		if [ $a -gt 2 ] && [ $a -lt 4 ]
		then
			continue 2 
		fi
		var3=$[ $a * $b ]
		echo "The reault of $a * $b os $var3"
	done
done

9、處理循環的輸出,可以在done後面用重定向符號,方便閱讀和管理
例子:

for (( a = 1; a < 10; a++ ))
do
	echo "The number is $a"
done > test.txt
echo "The command is finished."

10、實例1:查找可執行的文件,執行一個程序的時候,shell會去PATH環境變量中去找
例子:

IFS=:
for folder in $PATH
do
	echo "$folder:"
	for file in $folder/*
	do
		if [ -x $file ]
		then
			echo " $file"
		fi
	done
done
發佈了8 篇原創文章 · 獲贊 1 · 訪問量 294
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章