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]#