for循环语法结构:

for 变量名 in 元素列表;do
    语句1
    语句2
    ……
done


  • 功能描述:用一个变量名去遍历元素列表,每访问一个元素就执行一次循环体中的语句,直到元素列表中的元素遍历完。

  • 元素列表:这个元素列表的生成方式有以下几种:

    1、直接逐个给出,元素与元素之间用空格分开

    2、使用通配符实现文件的通配,例如“for File in /var/*”,这个元素列表中就是目录/var上的所有文件

    3、使用命令的方式来生成这个列表

    4、数字序列的生成有两种方式:a、{1..100},表示生成1到100的数字序列。

    b、`seq [起始数字] [步长] 结束数字 `

example:

1、写一个脚本,把/etc/inittab /etc/fstab档案拷贝到/tmp目录下,文件名为“原始文件名-日期”

#!/bin/bash
#
for File in /etc/fstab /etc/inittab;do
        Basename=`basename $File`
        cp $File /tmp/$Basename-`date +%F`
done


2、写一个脚本,显示出/etc/passwd中第1、第3、第6个用户的用户名,UID,GID,shell信息

#!/bin/bash
#
for Id in 1 3 6;do
        Username=`head -$Id /etc/passwd | tail -1 | cut -d: -f1`
        Uid=`head -$Id /etc/passwd | tail -1 | cut -d: -f1`
        Sell=`head -$Id /etc/passwd | tail -1 | cut -d: -f1`
        echo "Username:$Username,Uid:$Uid,Sell:$Sell."
done

3、写一个脚本,判断/var目录下的目录、档案的类型,是目录,还是档案文件

#!/bin/bash
#
for File in /var/*;do
        file $File
done

注:此脚本只能判断/var目录下的一级目录及/var下的档案的类型,对/var下的二级目录及二级目录下的档案不能实现判断。

4、写一个脚本,用for循环显示出/etc/passwd里的所有用户的用户名和shell信息

#!/bin/bash
#
Count=`wc -l /etc/passwd | cut -d' ' -f1`
for I in `seq 1 $Count`;do
        Uid=`head -$I /etc/passwd | tail -1 | cut -d: -f3`
        Shell=`head -$I /etc/passwd | tail -1 | cut -d: -f7`
        echo "UID:$Uid,SELL:$Shell"
done