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 $pass" >> pass.txt fi done
for 循环笔试题
从1+100的和
#!/bin/bash sum=0 for ((i=1;i<101;i++)) do ((sum+=i)) done echo $sum
5050
案例:
企业项目实践机会(第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 $RAN"|tee -a ran.txt fi fi done
while 循环
while [ 条件测试 ] do 命令的集合 done
#!/bin/sh while [ 10 -gt 10 ] do sleep 1 echo ok done
while 批量创建用户
#!/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 [root@shell ~]# cat exit.sh #!/bin/sh while true do echo hehe exit echo test done echo done...... break [root@shell ~]# cat break.sh #!/bin/sh while true do echo hehe break echo test done echo done...... continue [root@shell ~]# cat break.sh #!/bin/sh while true do echo hehe continue echo test done echo done......