跳至主要內容

Shell Script中的for循环

酷丁大约 2 分钟shelllinuxfor

for循环

for循环是Shell中最常用的循环语句,它的一般格式为:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

其中var是变量名,item是列表,command是循环体,dodone是关键字。

for...do...done(列表循环)

这里有一个简单的例子,每一行会输出一些动物的名字:

#!/bin/bash
for animal in dog cat elephant
do
    echo "There are ${animal}s..."
done

让我们想像另外一种状况,由于系统上面的各种帐号都是写在 /etc/passwd 内的第一个栏位,通过管线命令的 cut 捉出单纯的帐号名称后,以 id 分别检查使用者的识别码与特殊参数呢?由于不同的 Linux 系统上面的帐号都不一样!此时实际去捉 /etc/passwd 并使用循环处理,如下:

#!/bin/bash
for username in `cat /etc/passwd | cut -f1 -d":"`
do
    id $username
    finger $username
done

也可以通过循环来处理一些特殊的文件,例如,我们可以使用循环来处理 /proc 目录下的所有文件,如下:

#!/bin/bash
for file in /proc/*
do
    if [ -d "$file" ]
    then
        echo "$file is a directory"
    elif [ -f "$file" ]
    then
        echo "$file is a file"
    fi
done

这里的-d-ftest命令的参数,用来判断是否是目录或者文件。

最后一个例子,让我们来用循环找出目录内的文件权限,如下:

#!/bin/bash

read -p "Enter a directory: " dir
if [ -z "$dir" ]
then
    echo "You enter nothing."
    exit 1
elif [ ! -d "$dir" ]
then
    echo "$dir is not a directory."
    exit 1
fi

filelist=`ls $dir`
for filename in $filelist
do
    perm=""
    test -r "$dir/$filename" && perm="$perm readable"
    test -w "$dir/$filename" && perm="$perm writable"
    test -x "$dir/$filename" && perm="$perm executable"
    echo "The file $dir/$filename's permission is $perm"
done

这里的-r-w-x也是test命令的参数,用来判断是否可读、可写和可执行。

for...do...done(计数循环)

在Shell中,for循环还有另外一种形式,它的一般格式为:

for ((初始值; 判断条件; 步长))
do
    command1
    command2
    ...
    commandN
done

这里的((...))是Shell中的算术表达式,初始值判断条件步长都是算术表达式,command是循环体,dodone是关键字。

这里有一个简单的例子,每一行会输出一个数字:

#!/bin/bash
for ((i=1; i<=10; i++))
do
    echo $i
done

这里的i=1是初始值,i<=10是判断条件,i++是步长。

参考资料