循环语句for-do-done
语法格式:
for var in list
do
commands
done
或:
for var in list ; do
commands
done
取值列表有多种取值方式,比如可以
直接读取in 后面的值,默认以空格做分隔
[root@xuegod63 ~]# vim for-1.sh
#!/bin/bash
for var in a1 b1 c1 d1
do
echo the text is $var
done
列表中的复杂值,可以使用引号或转义字符"\"来加以约束
[root@xuegod63 ~]# cat for-2.sh
#!/bin/bash
for var in a1 b1 "c1 d1" e2 "hello world"
do
echo the text is $var
done
[root@xuegod63 ~]# cat for-3.sh
#!/bin/bash
for var in a1 b\'1 "c1 d1" e2 "hello world" I\'s a22
do
echo the text is $var
done
从变量中取值
[root@xuegod63 ~]# cat for-4.sh
#!/bin/bash
list="a1 b1 c1 d1"
for i in $list
do
echo is a $i
done
从命令中取值
[root@xuegod63 ~]# cat for-5.sh #以空格做分隔符
#!/bin/bash
for i in `cat /etc/hosts`
do
echo "$i"
done
自定义shell分隔符
默认情况下,base shell会以空格、制表符、换行符做为分隔符。通过IFS来自定义为分隔符
指定单个字符做分隔符:
IFS=: #以:冒号做分隔符
可以指定多个
如 IFS='\n':;" #这个赋值会将反斜杠、n、冒号、分号和双引号作为字段分隔符。
注:$'\n'与'\n'时的区别
IFS='\n' #将字符\和字符n作为IFS的换行符。
IFS=$'\n' #正真的使用换行符做为字段分隔符。
[root@xuegod63 ~]# cat for-6.sh
#!/bin/bash
IFS=$'\n' #指定以\n回车做为 for语句的分隔符
for i in `cat /etc/hosts`
do
echo "$i"
done
[root@xuegod63 ~]# cat for-7.sh #以:冒号做分隔符
#!/bin/bash
IFS=:
list=`head -1 /etc/passwd`
for i in $list
do
echo $i
done
C语言风格的for
语法格式:
for ((i=0;i<10;i++))
do
commmands
done
例1:单个变量。 输出1到10之间的数字
[root@xuegod63 ~]# cat for-8.sh
#!/bin/bash
for (( i=1 ; i<=10 ; i++ ))
do
echo num is $i
done
注:
互动: i++ 这一条语句在for循环体中哪个位置执行?
for (( i=1 ; i<=10 ; )) #i=1 只赋值一次。然后执行 i <= 10
do
echo num is $i
i=$(($i+1)) # i++在这里执行。 当for循环体中所有命令执行完后,再执行i++
done
例2:多个变量。 同时输出1-9的升序和降序
[root@xuegod63 ~]# cat for-8.sh
#!/bin/bash
for ((a=1,b=9 ; a<10 ; a++,b--))
do
echo num is $a - $b
done