循环命令用于将一个命令或一组命令执行指定的次数,或者一直执行直到满足某个条件为止。在Bash shell中常用的循环语句有,for循环,while循环,until循环
一、For循环语句
1、For循环的语法
for var in list
do
commands
done
2、For循环的流程图
3、For循环举例
1)、输入一个文件,判断文件是directory还是file
[[email protected] 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 [[email protected] test]# sh 3.sh /etc/passwd /etc/passwd is a file [[email protected] test]# sh 3.sh /etc /etc is a directory [[email protected] test]#
说明:
行3:调用了位置变量$1
行5-11:使用if语句判断$1是文件还是目录
2)、计算一个目录中有多少个文件
[[email protected] 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以内整数的和
[[email protected] 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;对所有用户执行此操作;
[[email protected] 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以内整数的和
[[email protected] 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是否登陆
转载于:https://blog.51cto.com/xiaodong88/1258953