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
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\t$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
[[email protected] ~]# cat exit.sh
#!/bin/sh
while true
do
     echo hehe
     exit
     echo test
done
echo done......

break
[[email protected] ~]# cat break.sh
#!/bin/sh
while true
do
     echo hehe
     break
     echo test
done
echo done......

continue
[[email protected] ~]# cat break.sh
#!/bin/sh
while true
do
     echo hehe
     continue
     echo test
done
echo done......

原文地址:https://www.cnblogs.com/youhongliang/p/12706532.html

时间: 04-13

shell的循环的相关文章

Linux Shell系列教程之(十)Shell for循环

本文是Linux Shell系列教程的第(十)篇,更多Linux Shell教程请看:Linux Shell系列教程 基本任何语言都有自己的循环语句,Shell当然也不例外,今天就为大家介绍下Shell for循环的用法. Shell for循环语法 Shell for循环的语法如下所示 for 变量 in 列表 do command1 command2 ... commandN done 列表是一组值(数字.字符串等)组成的序列,每个值通过空格分隔.每循环一次,就将列表中的值依序放入指定的变量

Linux Shell系列教程之(十一)Shell while循环

本文是Linux Shell系列教程的第(十一)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇Linux Shell系列教程之(十)Shell for循环中,我们已经对Shell 循环语句的for循环进行了介绍,本篇给大家介绍下Shell 中另一种循环语句:Shell while循环. Shell while循环语法及特点 Shell while循环的语法如下所示: while command do Statement(s) to be executed if

shell脚本--循环结构

shell的循环结构有while和for两种 while循环 while后面跟着判断条件,判断条件可以为多个,但是每一个判断条件都要是用单独的 [  ]括起来,然后多个判断之间使用 &&.||来表示含义. 例子: #!/bin/bash #文件名:test.sh tot=0 num=10 while [ $num -gt 0 ] do tot=$(($tot + $num)) num=$(($num - 1)) done echo "总和为"$tot 运行结果如下: [

Shell while循环详解

while 循环是 Shell 脚本中最简单的一种循环,当条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环. Shell while 循环的用法如下: while conditiondo    statementsdone condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),do和done都是 Shell 中的关键字. while 循环的执行流程为: 先对 condition 进行判断,如果该条件成立,就进入循环

Shell 编程 循环语句

本篇主要写一些shell脚本循环语句的使用. for 循环 指定次数 #!/bin/bash for ((i=1;i<=10;i++)) do echo $i done [[email protected] ~]# vim num.sh [[email protected] ~]# chmod +x num.sh [[email protected] ~]# ./num.sh 1 2 3 4 5 6 7 8 9 10 遍历循环 #!/bin/bash TMP=$(cat username.txt

shell条件-循环-分支-函数

shell流程控制  ( if  结构     循环结构    分支结构)                       控制脚本的执行过程                       流程控制彼此可以互相嵌套使用,也可以自己嵌套自己                       根据条件的条件判断结果执行-----------------------------------------------------if结构 单分支 if  条件判断;then    执行的代码    ......fi i

linux shell for循环解决递归循环目录结构

今天总结一下关于linux shell里的递归循环的问题起因是一个群友在群里的提问问的是怎么把有或多或少空目录的几个文件移动走的问题归根结底就是一个递归循环的问题 如果之前接触过c语言之类的编程语言.那么这个很好理解就是通过函数来不断的自己调用自己这种方法有一个很大的弊端就是需要很多资源比如有一种进程调用的 fork 炸弹 就是自调用搞的 接下来我就贴一下代码然后简单的讲解一下 #!/bin/sh . /etc/plus.lib a() {     for file  in `ls $1`   

Shell for循环

与其他编程语言类似,Shell支持for循环. for循环一般格式为: for 变量 in 列表 do command1 command2 ... commandN done 列表是一组值(数字.字符串等)组成的序列,每个值通过空格分隔.每循环一次,就将列表中的下一个值赋给变量. in 列表是可选的,如果不用它,for 循环使用命令行的位置参数. 例如,顺序输出当前列表中的数字: #!/bin/bash for loop in 1 2 3 4 5 do echo "The value is:$l

Shell 学习17 - Shell for 循环

与其他编程语言类似,Shell支持for循环. for循环一般格式为: for 变量 in 列表 do command1 command2 ... commandN done 列表是一组值(数字.字符串等)组成的序列,每个值通过空格分隔.每循环一次,就将列表中的下一个值赋给变量. in 列表是可选的,如果不用它,for 循环使用命令行的位置参数. 例如,顺序输出当前列表中的数字: for loop in 1 2 3 4 5 do echo "The value is: $loop" d

shell 数字循环中变量的使用

shell环境,假设有一个变量NUM,需要用一个for循环输出NUM到NUM+n之间的所有值 常用做法是 1 for a in {NUM..NUM+n} 2 do 3 echo ${a} 4 done 例如 但是引用了变量会报错 这里{${kk}..${tt}}被当作一整个字符串了 解决方法是用eval 1 for a in `eval echo {${kk}..$[kk+4]}` 2 do 3 echo ${a} 4 done 如下: mark一下