for循环语法格式

格式一:

for 变量 in 循环列表
do
    循环体
done
说明:for执行的时候,从循环列表中的第一个值开始执行循环,遍历循环列表,循环结束。


格式二:

for ((初始值;结束条件;变化值))
do
    循环体
done

for循环和生成列表在一起用时,通常要进行命令替换,如$(command)或`command`


生成列表的方法

方法1:

{a..b}:表示的是从a到b
{a..b..c}:表示的是从a到c,并且以c为增加值(步长)

示例1:

[root@Server3 tmp]# touch {1..3}
[root@Server3 tmp]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jul  8 21:26 1
-rw-r--r-- 1 root root 0 Jul  8 21:26 2
-rw-r--r-- 1 root root 0 Jul  8 21:26 3
[root@Server3 tmp]#

示例2:

[root@Server3 tmp]# touch {1..5..2}
[root@Server3 tmp]# ls -l
total 0
-rw-r--r-- 1 root root 0 Jul  8 21:26 1
-rw-r--r-- 1 root root 0 Jul  8 21:26 3
-rw-r--r-- 1 root root 0 Jul  8 21:26 5
[root@Server3 tmp]#


方法2:

seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST

示例3:

[root@Server3 Menu]# seq 4
1
2
3
4
[root@Server3 Menu]# seq 1 2 5
1
3
5
[root@Server3 Menu]# seq 1 3
1
2
3
[root@Server3 Menu]#


示例4:从1加到100

[root@Server3 Learn]# cat for1.sh 
#!/bin/bash
declare -i sum=0
for i in $(seq 1 100)
do
#       sum=$(expr $sum + $i)
#       sum=$[$sum+$i]
#       sum=$(($sum+$i))
        let sum=$sum+$i
done
echo "$sum"
[root@Server3 Learn]# 

说明:
declare为声明一个变量的类型。如果开始的时候不使用declare -i sum=0,将sum的变量声明为整型,而是直接写成sum=0,则表示的是sum为字符串类型。
$(seq 1 100):这一块为循环列表,表示的是从1到100。也可以写成{1..100}。
do和done之间的循环体表示的都是计算数值相加的不同方法,结果都是一样的。


示例5:

[root@Server3 Learn]# cat for2.sh 
#!/bin/bash
for i in $(cat /etc/passwd | cut -d: -f1)
do
        echo "Hello $i"
done
[root@Server3 Learn]#


示例6:

[root@Server3 Learn]# cat for2.sh
#!/bin/bash
line=$(wc -l /etc/passwd | awk '{print $1}')
for i in $(seq 1 $line)
do
        echo "Hello `head -n $i /etc/passwd | tail -n 1 | cut -d: -f1`, your shell is $(head -n $i /etc/passwd | tail -n 1 | cut -d: -f7)"
done
[root@Server3 Learn]#