Shell流程控制语句for
for语法格式:
for 变量 in 参数列表 do 命令 done 或者 for 变量 in 参数列表 ; do 命令 done
for语句流程控制图:
实例:
[root@youxi1 ~]# vim a.sh #!/bin/bash for var in a1 a2 b1 b2 do echo $var done [root@youxi1 ~]# sh a.sh a1 a2 b1 b2
参数列表可以更复杂些,部分特殊符号需要转义
[root@youxi1 ~]# vim b.sh #!/bin/bash for var in I\'m "hello world" "c1 c2 d1 d2" do echo $var done [root@youxi1 ~]# sh b.sh I'm hello world c1 c2 d1 d2
参数列表还可以从变量中读取,可以是多个变量
[root@youxi1 ~]# vim c.sh #!/bin/bash list="e1 e2 f1 f2" list2="hello world" for var in $list $list2 do echo $var done [root@youxi1 ~]# sh c.sh e1 e2 f1 f2 hello world
参数列表还可以从命令中取值
[root@youxi1 ~]# vim d.sh #!/bin/bash for var in `head -5 /etc/passwd` do echo $var done [root@youxi1 ~]# sh d.sh root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
(1).扩展1:自定义shell分隔符
(2).扩展2:C语言风格的for循环
C语言风格的for语法格式:
for ((变量赋值;条件判断;一次循环完成后执行的操作)) do 命令 done
注意:变量赋值可以放在for循环外部定义,一次循环完成后执行的操作可以放在循环里面。
实例如下:
[root@youxi1 ~]# vim a.sh #!/bin/bash i=0 for ((;i<=10;)) ; do echo "Num is $i" let i++ done [root@youxi1 ~]# sh a.sh Num is 0 Num is 1 Num is 2 Num is 3 Num is 4 Num is 5 Num is 6 Num is 7 Num is 8 Num is 9 Num is 10
另外变量赋值和一次循环完成后执行的操作,这两部分可以存在多个变量操作,实例如下:
[root@youxi1 ~]# vim a.sh #!/bin/bash for ((a=0,b=5;a<=10;a++,b--)) ; do echo "a-b="$[a-b] done [root@youxi1 ~]# sh a.sh a-b=-5 a-b=-3 a-b=-1 a-b=1 a-b=3 a-b=5 a-b=7 a-b=9 a-b=11 a-b=13 a-b=15
(3).扩展:seq命令
seq命令获取两个数以及之间的所有整数
[root@youxi1 ~]# vim a.sh #!/bin/bash for i in `seq -5 5` ; do echo $i done [root@youxi1 ~]# sh a.sh -5 -4 -3 -2 -1 0 1 2 3 4 5