shell的循环
for循环
语法
for 变量名 in 取值列表 {#取值列表可以是数字 字符串 序列 命令} 以空格分隔
do
命令的集合
done
for 手 in 苹果 梨 香蕉 橘子 变量的值 依次从左到右读取
do
echo 包裹${手}
done包裹苹果 包裹梨 包裹香蕉 包裹橘子
案例1: 要求判断10.0.0.1-254网段的在线主机 能ping通则认为在线
注意: wait 等待上面的所有命令执行完成后才继续往下执行
#!/bin/sh
for i in {1..254}
do
{
IP=10.0.0.$i
ping -c1 -W1 $IP &>/dev/null
if [ $? -eq 0 ];then
echo "ping $IP is ok"
fi } &
done
wait
echo "在线取IP完成"案例2: 使用for循环创建user.txt中的用户 附加 每个用户随机8位密码 用户名和密码统一输出到文件.
user.txt zs ls oldboy alex lz
#!/bin/sh
for i in `cat user.txt`
do
id $i &>/dev/null
if [ $? -eq 0 ];then
echo "useradd:$i already exists"
else
useradd $i &>/dev/null
if [ $? -eq 0 ];then
echo "create $i is ok"
else
echo "error"
fi
pass=`echo $((RANDOM))|md5sum|cut -c1-8`
echo $pass|passwd --stdin $i &>/dev/null
[ $? -eq 0 ] && echo "密码创建成功" || echo "密码创建失败"
echo -e "$i\t$pass" >> pass.txt
fi
donefor 循环笔试题
从1+100的和
#!/bin/bash
sum=0
for ((i=1;i<101;i++))
do
((sum+=i))
done
echo $sum5050
案例:
企业项目实践机会(第6次)来了(本月中旬),但是,名额有限,队员限3人(班长带队)。
因此需要挑选学生,因此需要一个抓阄的程序
#!/bin/sh
>ran.txt
touch ran.txt
while true
do
RAN=`echo $((RANDOM%100+1))`
if [ `grep -w $RAN ran.txt|wc -l` -eq 1 ];then
continue
fi
read -p "请输入你的姓名: " name
if [ $name = "exit" ];then
echo "抓阄完毕统计结果如下"
sort -rnk2 ran.txt
exit
else
if [ `grep -w $name ran.txt|wc -l` -eq 1 ];then
echo "抓过阄了不要闹了"
continue
else
echo -e "$name\t$RAN"|tee -a ran.txt
fi
fi
donewhile 循环
while [ 条件测试 ]
do
命令的集合
done
#!/bin/sh
while [ 10 -gt 10 ]
do
sleep 1
echo ok
donewhile 批量创建用户
#!/bin/sh
while read user
do
useradd $user &>/dev/null
if [ $? -eq 0 ];then
echo "ok"
else
echo "error"
fi
done<user.txt
<user.txt 从文件中读取用户名 在循环里执行Shell内置命令
exit 退出整个脚本
break 结束当前循环 或者跳出本层循环
continue 忽略本次循环剩余的代码,直接进入下一次循环
exit
[ ~]# cat exit.sh
#!/bin/sh
while true
do
echo hehe
exit
echo test
done
echo done......
break
[ ~]# cat break.sh
#!/bin/sh
while true
do
echo hehe
break
echo test
done
echo done......
continue
[ ~]# cat break.sh
#!/bin/sh
while true
do
echo hehe
continue
echo test
done
echo done......