1.列表for循

for variable in list
do
指令
done
# variable 循环变量
#list为列表,执行的次数与list列表中的常数或字符串的个数相等
#do与dong之间是的命令称为循环体

[root@zhu1 shell]# sh for.sh
s=2500
[root@zhu1 shell]# cat for.sh
#!/bin/bash
for i in $(seq 1 2 100)
do
let "s+=i"
done
echo "s=$s"

[root@zhu1 shell]# sh for1.sh
zhu + jiang + tao +
[root@zhu1 shell]# cat for1.sh
#!/bin/bash
for name in zhu jiang tao
do
echo -n "$name + "
done
echo

2.不带列表for循环

#for循环的语法中in list这部分可以省略不写,此时bash会有命令行读取各个参数,轮询带入变量中,其作用与下相同
for 变量 in $@
do
命令区域
done

[root@zhu1 shell]# sh for.sh 千 山 鸟 飞 绝
千
山
鸟
飞
绝
####################
千
山
鸟
飞
绝
[root@zhu1 shell]# cat for.sh
#!/bin/bash
for i
do
echo "$i"
done
echo "####################"
for name in $@
do
echo "$name"
done

#不带列表的for循环,一般不常用,在用到位置参数时可能会用到。

3.类C风格的for循环

for ((初始值;限制值;步长))
do
命令区域
done

[root@zhu1 shell]# sh for.sh
1
11
21
31
41
51
61
71
81
91
[root@zhu1 shell]# cat for.sh
#!/bin/bash
for ((i=1;i<=100;i+=10))
do
echo "$i"
done

IFS字段分隔符对for循环的影响
[root@zhu1 shell]# cat for.sh
#!/bin/bash
name="ming yue ji shi you"
for IFS in "" "i" "yue"
do
for i  in $name
do
echo  "$i "
done
echo
echo "#####################"
done
[root@zhu1 shell]# sh for.sh
ming
yue
ji
shi
you
#####################
m
ng yue j
sh
you
#####################
ming
yue
ji
shi
you
#####################

4.while循环

#while循环称为前测试循环,它的循环重复次数是有一个条件来控制是否继续重复执行这个语句,while循环的执行的过程是先判断条件的真假,若为真才会开始循环。

1.计数器控制的while循环

[root@zhu1 shell]# sh while.sh
1 千山鸟飞绝
2 千山鸟飞绝
3 千山鸟飞绝
4 千山鸟飞绝
[root@zhu1 shell]# cat  while.sh
#!/bin/bash
i=1
while [ $i -lt 5 ]
do
echo "$i 千山鸟飞绝"
let "i++"
done

2.结束标记控制的while循环

[root@zhu1 shell]# sh while.sh
please input what do you guess:100
too high,try again
5
too small,try again
8
contraguration,you are right,the resault is 8
[root@zhu1 shell]# cat while.sh
#!/bin/bash
read -p "please input what do you guess:" i
while [ "$i" -ne  8 ]
do
if [ "$i" -lt 8 ];then
echo "too small,try again"
read i
elif [ "$i" -gt 8 ];then
echo "too high,try again"
read i
else
exit 0
fi
done
echo "contraguration,you are right,the resault is 8"

read variable
while [[ "$variable" != variable ]]
do
read variable
done

3.标志控制的while循环

single=0
while [[ "$single" != 1 ]]
do
if expresion;then
single=1
fi
done

[root@zhu1 shell]# sh while.sh  ba jiu wen qing tian , dan yuan ren cahng jiu
ba
jiu
wen
qing
[root@zhu1 shell]# cat while.sh
#!/bin/bash
i=0
while [[ "$i" != 1 ]]
do
for j in $@
do
if [ "$j" != "tian" ];then
echo "$j"
else
exit 0
fi
done
i=1
done

5.until循环

until 条件测试
do
命令
done
#当条件测试为假时便进入循环,在命令区域应有改变条件测试的命令,这样直到条件为真时边终止循环

[root@zhu1 shell]# sh until.sh
2550
[root@zhu1 shell]# cat  until.sh
#!/bin/bash
i=0
s=0
until [ "$i" -eq 100 ]
do
let "i+=2"
let "s+=i"
done
echo "$s"

6.select选择

select 选项变量 in list
do
命令区域
done
#select命令建立一个列表,列表的选项就是list的字段,列表的提示符号,有bash的 内置变量PS3来定义,默认是#? ,用户可自定义提示符号,select会给各个选项一个编号,编号由1开始递增,当选择编号时该选项的内容就设值给选项变量,而选择的编号的值就存在REPLY中

[root@zhu1 shell]# sh select.sh
1) ni
2) ke
3) zhi
4) dao
#? 1
what do you want do write: ni
#? 2
what do you want do write: ke
#? 4
[root@zhu1 shell]# cat select.sh
#!/bin/bash
name="ni ke zhi dao"
select f in $name
do
if [ "$f" != "dao" ];then
echo "what do you want do write: $f"
else
exit 0
fi
done

7.break的使用

[root@zhu1 shell]# sh break1
1: 千山鸟飞绝
2: 千山鸟飞绝
3: 千山鸟飞绝
4: 千山鸟飞绝
5: 千山鸟飞绝
[root@zhu1 shell]# cat break1
#!/bin/bash
name="千山鸟飞绝"
for ((i=1;i<=5;i++))
do
echo "$i: $name"
done
[root@zhu1 shell]# sh break.sh
1: 千山鸟飞绝
2: 千山鸟飞绝
[root@zhu1 shell]# cat  break.sh
#!/bin/bash
name="千山鸟飞绝"
for ((i=1;i<=5;i++))
do
if [ "$i" -eq 3 ];then
break
else
echo "$i: $name"
fi
done

#在前面的几种循环中,如果想提前结束循环,可在循环中使用break命令,执行break时会跳出一层寻哈U闹,如果跳出多层循环,可在break命令后加上层数n ,(n一定要大于等于1)

8.continue使用

[root@zhu1 shell]# sh break.sh
1: 千山鸟飞绝
2: 千山鸟飞绝
4: 千山鸟飞绝
5: 千山鸟飞绝
[root@zhu1 shell]# cat break.sh
#!/bin/bash
name="千山鸟飞绝"
for ((i=1;i<=5;i++))
do
if [ "$i" -eq 3 ];then
continue
else
echo "$i: $name"
fi
done

#continue一样可以用在for,while,until,select这四种循环中,和break不同的是continue会跳过本次循环,重新开始执行下一个循环;而break是跳出整个循环。