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