bash脚本编程之循环控制语句

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

你可能感兴趣的:(shell脚本)