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编程之循环语句的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程之循环语句

shell if 语句

shell编程之case分支语句,for循环语句和while循环语句

Shell编程之循环语句

Shell编程之循环语句

shell脚本——编程之循环语句(forwhileuntil)