case多分支语句
case语句的结构
针对变量的不同取值,分别执行不同的命令序列
实例1
击键类型识别
提示用户输入一个字符
判断出该字符是字母,数字或者其他字符
#!/bin/bash
read -p "请输入一个字符:" key
case $key in
[a-z] | [A-Z])
echo "你输入的是字母"
;;
[0-9])
echo "你输入的是数字"
;;
*)
echo "你输入的是特殊字符"
esac
实例2
输入成绩,查看成绩等级
#!/bin/bash
read -p "请输入你的成绩:" num
case $num in
[8-9][0-9]|100)
echo "优秀"
;;
7[0-9])
echo "良好"
;;
6[0-9])
echo "合格"
;;
[0-9]|[1-5][0-9])
echo "不合格"
;;
*)
echo "您输入有误"
esac
for语句的结构
读取不同的变量值,用来逐个执行同一组命令
实例1
批量添加用户
将用户名存放在name.txt文件中,每行一个
初始密码均设为123456
验证脚本
#!/bin/bash
TMP=$(cat /root/name.txt)
for USER in $TMP
do
echo "用户是$USER"
useradd $USER
echo "123456" | passwd --stdin $USER > /dev/null
done
实例2
根据IP地质检查主机状态
IP地质存放在demo04.txt文件中,每行一个
使用ping命令检测各主机的连通性
#!/bin/bash
IP=$(cat /root/demo04.txt)
for ip in $IP
do
ping -c 1 -s 1 -w 3 $ip > /dev/null
if [ $? -eq 0 ]
then
echo "$ip主机存在"
else
echo "$ip主机不存在"
fi
done
while语句的结构
重复测试某个条件,只要条件成立则反复执行
实例1
批量添加用户
用户名称以stu开头,按数字顺序进行编号
一共添加5个用户,即stu1,stu2,stu3...
初始密码均设为123456
#!/bin/bash
num=1
while [ $num -le 5 ]
do
useradd stu$num
echo "123456" | passwd --stdin stu$num &> /dev/null
let num++
done
实例2
猜商品价格脚本
通过变量RANDOM获得随机数
提示用户猜测并记录次数,猜中后退出循环
#!/bin/bash
random=$(expr $RANDOM % 100)
tim=0
while true
do
read -p "请输入商品的价格:" jia
let tim++
if [ $jia -eq $random ]
then
echo "恭喜您猜对了"
echo "您一共猜了$tim"
exit 0
elif [ $jia -lt $random ]
then
echo "您猜的数小了"
else
echo "您猜的数大了"
fi
done
综合实例
进入五家商店分别购买商品,最后查看消费总额
#!/bin/bash
i=1
sum=0
while [ $i -le 5 ]
do
echo "进入第$i家商店"
read -p "是否进入看看(yes/no)" doing
while [ $doing = "yes" ]
do
echo "1:衣服¥200"
echo "2:鞋子¥100"
echo "3:手套¥75"
echo "4:裤子¥150"
read -p "请选择需要购买的商品序列:" num
case $num in
1)
echo "衣服购买成功"
expr $[sum+=200] &> /dev/null
;;
2)
echo "鞋子购买成功"
expr $[sum+=100] &> /dev/null
;;
3)
echo "手套购买成功"
expr $[sum+=75] &> /dev/null
;;
*)
echo "裤子购买成功"
expr $[sum+=150 &> /dev/null
esac
read -p "是否继续进行购买(yes/no)" doing
done
let i++
if [ $doing = "no" ]
then
continue
fi
done
echo "购物总价:$sum"
until语句的结构
重复测试某个条件,只要条件不成立则反复执行
实例1
计算1-50的和值
通过循环累计的方式计算1-50的和值
#!/bin/bash
sum=0
i=0
until [ $i -eq 51 ]
do
let sum+=$i
let i++
done
echo "总数之和为:$sum"
实例2
为指定用户发送在线消息
若用户不在线(未登陆系统),则每5s试一次,直至用户登录后在发送消息
用户与消息通过为止参数传递给脚本
#!/bin/bash
if [ $# -lt 0 ]
then
echo "Usage:$0 <user><message>"
exit 1
fi
grep "$1" /etc/passwd &> /dev/null
if [ $? -eq 0 ];then :
else
echo "用户不存在"
fi
until who|grep "$1" > /dev/null
do
echo "用户不在线"
sleep 5
done
echo $2 | write $1