continue:提前结束本轮循环,而直接进入下一轮循环判断;
while CONDITION1; do
CMD1
...
if CONDITIONS2; then
continue
fi
CMDn
...
done
示例:求100内偶数和;
declare -i evensum=0
declare -i i=0
while [ $i -le 100 ];do
let i++
if [ $[$i%2] -eq 1 ];then
continue
fi
let evensum+=$i
done
echo "evensum : $evensum"
break:提前跳出循环
while CONDITION1; do
CMD1
...
if CONDITIONS2; then
break
fi
done
break #:在循环嵌套时,指明跳出哪层循环;
sleep命令:
delay for a specified amount of time
sleep #
#:为数字默认单位是s秒钟,可用m分钟,h小时,d天为单位;
创建死循环:
while true;do
循环体
done
退出方式:
某个测试条件满足时,让循环体执行break命令;
until false;do
循环体
done
示例:求100内奇数和
declare -i oddsum=0
declare -i i=1
while true; do
let oddsum+=$i
let i+=2
if [ $i -gt 100 ];then
break
fi
done
练习:每隔3秒钟到系统上获取已经登录的用户的用户信息,其中,如果aaa用户登录系统,则记录于日志中,并退出;
while true;do
if who | grep "^aaa\>" &>/dev/null;then
break
fi
sleep 3
done
echo "$(date +"%F %T")aaa loggend on " >> /tmp/users.log
或改写为:
until who |grep "^aaa\>" &>/dev/null;do
sleep 3
done
echo "$(date +"%F %T") aaa longed on" >> /tmp/user.log
while循环的特殊用法(遍历文件的行):
while read VARIABLE;do
循环体;
done < /PATH/FROM/SOMEFILE
依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将其值赋值给VARIABLE变量;
示例:找出ID号为偶数的用户,显示器用户名、ID及默认shell;
while read line;do
userid=$(echo $line |cut -d: -f3)
username=$(echo $line |cut -d: -f1)
usershell=$(echo $line |cut -d: -f7)
if [ $[$userid%2] -eq 0 ];then
echo "$username,$userid,$usershell"
fi
done < /etc/passwd