文章目录
- shell脚本之循环语句(for循环与while循环之详解)
- 一、for循环语句
- 1.1for语句结构
- 1.2for语句示例
- 1.2.1利用文件中的名称列表批量添加用户,并给每个用户设置密码123123
- 1.2.2批量删除上面添加的用户
- 1.2.3 根据IP地址批量检查主机状态
- 二、while循环语句
- 2.1while语句结构
- 2.2while语句示例
- 2.2.1 批量添加以stu开头以数字进行编号的账户名即stu1、stu2、stu3.....stu10,初始密码为123123
- 2.2.2检测14.0.0.1 14.0.0.14网段主机 的连通性
shell脚本之循环语句(for循环与while循环之详解)
一、for循环语句
1.1for语句结构
for 循环 指定次数循环 遍历:把集合中每一个元素都读取一遍
语句结构
for 变量名 in 取值列表
do 命令序列
done
1.2for语句示例
1.2.1利用文件中的名称列表批量添加用户,并给每个用户设置密码123123
创建一个名单文件
[root@localhost samba]# vim users.txt
jack
john
kate
lucy
编辑脚本
[root@localhost opt]# vim useradd.sh
#!/bin/bash
list=$(cat /opt/users.text)
for user in $list
do
useradd $user
echo "123123"|passwd --stdin $user &> /dev/null 面交互设置密码,
echo "创建$user成功"
done
~
验证
[root@localhost opt]# sh useradd.sh
创建john成功
创建lucy成功
创建kateck成功
useradd:用户“john”已存在
创建john成功
创建kate成功
useradd:用户“lucy”已存在
创建lucy成功
1.2.2批量删除上面添加的用户
#!/bin/bash
list=$(cat /opt/users.text)
for user in $list
do
userdel -r $user
echo "123123"|passwd --stdin $user &> /dev/null
echo "删除$user成功"
done
验证
[root@localhost opt]# sh useradd.sh
删除john成功
删除lucy成功++
删除kateck成功
userdel:用户“john”不存在
删除john成功
删除kate成功
userdel:用户“lucy”不存在
删除lucy成功
1.2.3 根据IP地址批量检查主机状态
检测14.0.0.1 14.0.0.14网段主机 的连通性
#!/bin/bash
for ((i=1;i<=14;i++))
do
ping -c 3 -i 0.2 -w 3 "14.0.0.$i" &> /dev/null
if [ $? -eq 0 ]
then
echo "host 14.0.0.$i is up"
else
echo "host 14.0.0.$i is down"
fi
done
验证
[root@localhost opt]# sh ipchck.sh
host 14.0.0.1 is down
host 14.0.0.2 is up
host 14.0.0.3 is down
host 14.0.0.4 is down
host 14.0.0.5 is down
host 14.0.0.6 is down
host 14.0.0.7 is down
host 14.0.0.8 is up
host 14.0.0.9 is down
host 14.0.0.10 is up
host 14.0.0.11 is down
host 14.0.0.12 is down
host 14.0.0.13 is down
host 14.0.0.14 is up
二、while循环语句
2.1while语句结构
重复测试某个条件,只要条件成立则反复执行,适用于要求控制循环次数,操作对象按数字编号,按特定条件重复操作等情况。
while 条件测试语句
do
命令序列
done
2.2while语句示例
2.2.1 批量添加以stu开头以数字进行编号的账户名即stu1、stu2、stu3…stu10,初始密码为123123
#!/bin/bash
i=1
while [ $i -le 10 ]
do
useradd stu$i
echo "123123" | passwd --stdin stu$i &> /dev/null
echo "用户stu$i创建成功"
let i++ “let i++”(等同于 i=`expr $i + 1`)
done
验证
[root@localhost opt]# vim stu.sh
[root@localhost opt]# sh stu.sh
用户stu1创建成功
用户stu2创建成功
用户stu3创建成功
用户stu4创建成功
用户stu5创建成功
用户stu6创建成功
用户stu7创建成功
用户stu8创建成功
用户stu9创建成功
用户stu10创建成功
2.2.2检测14.0.0.1 14.0.0.14网段主机 的连通性
true与false是两个特殊的条件,true代表条件为真,条件不成立;false代表条件不成立。
可以利用true来形成while死循环来不停猜价格。
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格范围为 0-999,猜猜看是多少?"
while true
do
read -p "请输入你猜测的价格数目:" a
let TIMES++
if [ $a -eq $PRICE ] ; then
echo "恭喜你答对了,实际价格是 $PRICE" echo "你总共猜测了 $TIMES 次"
exit 0
elif [ $a -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done
验证
[root@localhost ~]# sh test11.sh
商品实际价格范围为 0-999,猜猜看是多少?
请输入你猜测的价格数目:500
太高了!
请输入你猜测的价格数目:300
太低了!
请输入你猜测的价格数目:400
太高了!
请输入你猜测的价格数目:350
太高了!
请输入你猜测的价格数目:325
太低了!
请输入你猜测的价格数目:335
太低了!
请输入你猜测的价格数目:340
太高了!
请输入你猜测的价格数目:338
太高了!
请输入你猜测的价格数目:337
恭喜你答对了,实际价格是 337 echo 你总共猜测了 9 次