while循环
while CONDITION; do
循环体
done
进入条件:CONDITION为true
退出条件:false
until循环
until CONDITION; do
循环体
done
进入条件:CONDITION为false
退出条件:CONDITION为true
循环控制语句(用于循环体中)
continue [n]:提前结束第n层循环,而直接进入下一轮判断;
while CONDITION1; do
COM1
...
ifCONDITION2; do
continue
fi
COMn
...
done
break [n]:提前结束循环:
while CONDITION1; do
COM1
...
if CONDITION2; do
break
fi
COMn
...
done
死循环
while true; do
循环体
done
until false; do
循环体
done
示例:每个3秒检测制定用户是否登录,如果登录则记录到日志中并退出。
(1)
#!/bin/bash
#
read -p "Enter a user name:" username
while true;do
if who | grep "^username/b"&> /dev/null;then
break
fi
sleep 3
done
echo "$username `date +%x%T`logged on.">>/tmp/user.log
(2)
#!/bin/bash
#
read -p "Enter a user name:" username
until who |grep "^username/b"&> /dev/null;do
sleep 3
done
echo "$username `date +%x%T` logged on." >> /tmp/user.log
while循环的特殊用法(便利文件的每一行);
while read line; do
循环体
done < /file
依次读取/file中的每一行,且将行赋值给变量line;
示例:找出ID号为偶数的所有用户,显示用户及ID号:
#!/bin/bash
#
while read line;do
if [ $[`echo $line | cut -d: -f3` % 2] -eq 0 ];then
echo -e -n "username: `echo $line |cut -d: -f1`\t"
echo "UID:`echo $line | cut -d: -f3`"
fi
done < /etc/passwd