shell的循环

Posted 代码改变世界!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell的循环相关的知识,希望对你有一定的参考价值。

for循环

语法
for 变量名 in 取值列表    {#取值列表可以是数字 字符串 序列 命令} 以空格分隔
do
       命令的集合
done

forin 苹果 梨 香蕉 橘子  变量的值 依次从左到右读取
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......

 

以上是关于shell的循环的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

如何使用事件侦听器来加载动画片段的循环

将vscode打造成无敌的IDE打造shell IDE--三大神器

AVKit – 视频片段仅循环 2 次

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围