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)
doecho "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)
doecho "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]#