先说说上次在讲case语句用法中提到的在Ubuntu中有时候写的脚本不能正常运行的问题吧,虽然还没搞懂,不过似乎只需要把那个运行不对的脚本删掉重新在建一个然后就可以运行出来了,如果有大神知道这方面的bug的话希望能够指点一下萌新。
今天来看看循环结构while和until的使用举例吧
while 测试条件
do
语句1
语句2
done
测试条件:条件满足就循环,直到条件不满足就退出循环
#!/bin/bash
##filename:guess_number.sh
#对被猜的数num进行赋值
#$RANDOM是一个系统随机数的环境变量,模100运算用于生成1~100的随机整数
num=$((RANDOM%100))
#使用永真循环、条件退出的方式接收用户的猜测并进行判断
while [ 1 ] #或((1))或空语句:
do
read -p "Please input a number[1..100]:" user_num
if [ $user_num -lt $num ]; then
echo "The number you inputed is less then my NUMBER."
elif [ $user_num -gt $num ]; then
echo "The number you inputed is greater then my NUMBER."
elif [ $user_num -eq $num ]; then
echo "Congratulate:my NUMBER is $num."
break
fi
done
until循环 测试条件
do
语句1
语句2
done
条件不满足循环,直到满足就退出循环
#!/bin/bash
##filename:until-user_online_to_write.sh
username=$1
if [ $# -lt 1 ]; then
echo "Usage:`basename $0` <username> {<message>}"
exit 1
fi
if grep "^$username:" /etc/passwd>/dev/null ; then :
else
echo "$username is not a user on this system."
exit 2
fi
until who|grep "$username" > /dev/null ; do
echo "$useraname is not logged on."
sleep 15
done
shift;msg=$*
[[ X"$msg" == "X" ]] && msg="Hello,$username"
echo "$msg" | write $username
这里先发送消息“Are you ok?”给用户test,然后用户尚未登陆
登陆用户test,过几秒之后收到之前发送的消息