Shell编程之循环语句
Posted Richard_Chiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell编程之循环语句相关的知识,希望对你有一定的参考价值。
Shell编程之循环语句(二)
while循环语句
- 重复测试某个文件,只要条件成立则反复执行
while 条件测试操作
do
命令序列
条件里的变量能够迭代
done
例题:
①.批量添加用户,用户名称以stu开头,按数字顺序进行编号,一共添加20个用户,即stu1、stu2、……、stu20,初始登录码均为123456
#!/bin/bash
#for name in 1..20
name=1
while [ $name -ge 0 -a $name -le 20 ]
do
useradd stu$name
echo 123456 | passwd --stdin stu$name
name=$[$name + 1]
done
#tail /etc/passwd
②.猜商品价格游戏,通过变量RANDOM获得随机数,提示用户猜测并记录次数,猜中后退出循环
#!/bin/bash
CURRENT=$[RANDOM % 1000]
a=1
num=0
while [ $a -eq 1 ]
do
read -p "请输入你猜测的价格(0~999):" price
if [ $price -gt $CURRENT ];then
echo "猜高了,请重试!"
let num++
elif [ $price -lt $CURRENT ];then
echo "猜低了,请重试!"
let num++
elif [ $price -eq $CURRENT ];then
let num++
echo "恭喜你,猜对了!价格为 $price ,你一共猜了 $num 次"
let a++
fi
done
untli循环语句
- 重复测试某个条件,只要条件不成立则反复执行
untli 条件测试
do
命令序列
条件里的变量能够迭代
done
例题:
①.计算1~50的和值,通过循环累加的方式计算1~50的和值
#!/bin/bash
a=1
sum=0
until [ $a -gt 50 ] #-gt,因为我们要满足until(条件不成立则反复执行)的条件
do
sum=$[$sum + $a]
let a++
done
echo "1~50累加的和值为: $sum"
②.为指定用户发送在线消息若用户不在线(未登录系统), 则每10分钟试一次,直至用户登录系统后在发送信息,用户名与消息通过位置参数传递给脚本
#!/bin/bash
# example: ./write.sh <USENAME> [message]
username=$1
nsg=$2
#用于判断执行脚本的格式是否携带了位置参数
if [ $# -lt 1 ];then
echo "USAGE: $0 <USENAME> [message]"
exit 1
fi
#用于判断携带的用户名参数是否正确
grep "^$username:" /etc/passwd > /dev/null
if [ $? -ne 0 ];then
echo "$username 不是系统用户!"
exit2
fi
#用于判断系统用户是否已登录
who | grep "$username" > /dev/null
while [ $? -ne 0 ]或until [ $? -eq 0 ]
do
echo "$username 尚未登陆系统,请先登录!"
sleep 10
done
if [ ! -z "$msg" ];then
echo "执行命令:echo $msg | write $username"
else
msg="Hello $username,this is default message"
echo "执行命令:echo $msg | write $username"
fi
以上是关于Shell编程之循环语句的主要内容,如果未能解决你的问题,请参考以下文章