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是跳出整个循环。