zoukankan      html  css  js  c++  java
  • 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......
  • 相关阅读:
    careercup-高等难度 18.1
    面试——网络
    堆和栈的区别(转过无数次的文章)
    Linux用户空间与内核空间(理解高端内存)
    Linux内存管理
    位操作实现加减乘除四则运算
    栈的压入和弹出序列
    DG gap sequence修复一例
    ORACLE 11gR2 DG(Physical Standby)日常维护02
    oracle的特殊权限s bit丢失
  • 原文地址:https://www.cnblogs.com/youhongliang/p/12706532.html
Copyright © 2011-2022 走看看