您的位置:首页 > 运维架构 > Shell

Shell脚本中常用的循环语句

2013-07-27 19:03 417 查看
循环命令用于将一个命令或一组命令执行指定的次数,或者一直执行直到满足某个条件为止。在Bash shell中常用的循环语句有,for循环,while循环,until循环
一、For循环语句
1、For循环的语法

for var in list
do
commands
done
2、For循环的流程图





3、For循环举例
1)、输入一个文件,判断文件是directory还是file

[root@localhost test]# cat 3.sh
#!/bin/sh
for file in $1
do
if [ -d "$file" ]
then
echo "$file is a directory"
elif [ -f "$file" ]
then
echo "$file is a file"
fi
done
[root@localhost test]# sh 3.sh /etc/passwd
/etc/passwd is a file
[root@localhost test]# sh 3.sh /etc
/etc is a directory
[root@localhost test]#


说明:
行3:调用了位置变量$1

行5-11:使用if语句判断$1是文件还是目录

2)、计算一个目录中有多少个文件

[root@localhost test]# cat 4.sh
#!/bin/bash
#
Count=0
for File in /tmp/*; do
file $File
Count=$[$Count+1]
done
echo "Total files: $Count."
说明:
行7:每循环一次Count的值+1

二、While循环语句
while命令允许定义要测试的命令,然后只要定义的测试命令返回0状态值,则执行while循环中的语句,否则直接退出
1)、while循环的语法
while test command
do
oter command
done
2)、while循环的流程图



3)、while循环举例
计算100以内整数的和
[root@localhost test]# cat 6.sh
#!/bin/sh
Sum=0
Count=1
while [ $Count -le 100 ]; do
let Sum+=$Count
let Count++
done
echo $Sum


如果用户的ID号为偶数,则显示其名称和shell;对所有用户执行此操作;
[root@localhost test]# cat 5.sh
#!/bin/sh
while read LINE; do
Uid=`echo $LINE | cut -d: -f3`
if [ $[$Uid%2] -eq 0 ]; then
echo $LINE | cut -d: -f1,7
fi
done < /etc/passwd
说明:
行3,8:将passwd中的每一行给变量LINE赋值(由于while能读到 $LINE的值,所以判断为 真,状态返回值为0)
行4,5,6:取出$LINE中用户的UID并判断UID是否是偶数,如果是偶数则显示其用户名和 shell

三、Until循环语句
Until命令允许定义要测试的命令,然后只要定义的测试命令返回非0状态值,则执行unitl循环中的语句,否则直接退出(unitl和while刚好相反)
1)、Until循环语句的语法

until test command
do
oter command
done
2)、Until循环的流程图



3)Until循环举例
计算100以内整数的和
[root@localhost test]# cat 6.sh
#!/bin/sh
Sum=0
Count=1
until [ $Count -gt 100 ]; do
let Sum+=$Count
let Count++
done
echo $Sum
每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出;否则,显示当前时间,并说 明hadoop尚未登录:

who | grep "^TOM" &> /dev/null
RetVal=$?
until [ $RetVal -eq 0 ]; do
date
sleep 5
who | grep "^TOM" &> /dev/null
RetVal=$?
done
echo "TOM is here."


说明:
行1,2:查看TOM用户是否登录,然后输出状态码
行3:如果状态返回值等于0则不执行下面的脚本。
行4,5:显示时间并设置sleep 5秒

行6,7:再次检查用户TOM是否登陆
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell