• 第三章 循环


    第三章 循环

    常用循环有:for,while,until,select,其中前三种工作中最常用。

    1,for循环语法结构

    功能:主要用于固定次数的循环,而不能用于守护进程及无限循环。

    #第一种格式:
    for 变量名 in  取值列表
    do
    	循环体
    done
    
    #变量名依次获取in后面的变量列表内容,取值表之间用空格分隔,每次只取一个,然后进入循环,执行完所有指令,当执行到done时结束本次循环,依此类推
    
    [root@localhost scripts]# cat ping001.sh
    #!/bin/bash
    for loop in 1 2 3 4 5
    do
            echo "The vlaue is xiaoqian"
    done
    [root@localhost scripts]# sh ping001.sh
    The vlaue is xiaoqian
    The vlaue is xiaoqian
    The vlaue is xiaoqian
    The vlaue is xiaoqian
    The vlaue is xiaoqian
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    #第二种格式:
    for 变量名 in  取值列表;do	循环体;done	
    
    • 1
    • 2

    2,for循序语法案例实战

    image.png

    1,实现批量主机ping探测

    [root@localhost scripts]# cat ping002.sh
    #!/bin/bash
    #ping check
    >ip.txt         #先清除该文件内容
    for i  in {2..254}
    do
            {
            ip=192.168.88.$i
            #网段
            ping -c1 -W1 $ip &> /dev/null
            #-W超时时间,意思就是等待一秒
            if [ $? -eq 0 ];then
                    echo "$ip" | tee -a ip.txt
                    #tee收集结果,-a追加
            fi
            } &
            #{} &中间有空格,后台运行
    done
    wait
    echo "finish"
    
    #回显一个结果
    [root@localhost scripts]# sh ping2.sh
    192.168.88.2
    192.168.88.120
    finish
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2,for循环实现批量用户创建

    #!/usr/bin/bash
    while : 
    do 
    read -p "pls enter pre & pass & num [xu 123 1]:" pre pass num
    
    printf "user information
    \-----------------
    pre:$pre
    paswd:$pass
    
    number:$num
    \-----------------
    "
    read -p "are you sure?[yes/no/quit]:" action
    if [ "$action" = "yes" ];then
    	break
    elif [ "$action" = "quit" ];then 
    	exit 0
    else
    	continue
    fi
    done
    echo "create user start"
    for i in `seq -w $num `
    do 
    	user=$pre$i
    	id $user &>/dev/null
    	if [ $? -eq 0 ];then
    		echo "$user exists"
    	else
    		useradd $user
    		echo "$pass" | passwd --stdin $user
    		if [ $? -eq 0 ];then 
    			echo "$user is created"
    		fi
    	fi
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    3,九九乘法表

    [root@localhost script]# vim for1.sh
    #!/bin/bash
    for ((i=1;i<=9;i++))
    do
       for ((j=1;j<=i;j++))
       do
            echo -ne "$i*$j=$((i*j))\t"
       done
    echo
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3,while循环

    while循环主要用来重复执行一组命令或语句,循环次数既可以固定,也可不固定

    while	条件测试
    do
    	循环体
    done	
    
    #对条件进行判断,如果条件成立是,则执行do和done之间的循环体,直到条件不成立时才停止循环
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    image.png

    4,while循环语句案例实战

    1,#while循环从1-10输出

    [root@localhost script]# vim while1.sh
    #!/bin/bash
    i=1
    while [ $i -le 10 ]
    do
       echo $i
       let i++
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2,#判断用户输入的用户名,如果不是root,则让用户一直输入

    #!/bin/bash
    read -p "请输入用户名:" User
    while [ $User != "root" ]
    do
            read -p "请输入用户名:" User
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5,Shell的并发控制

    1,for循环实现Shell的并发控制

    					=========for循环======== 
    for条件测试
    do
    		循环体
    done
    ==========当条件为真时,执行循环体============
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2,for后台循环实现Shell的并发控制

    					=========for循环======== 
    for条件测试
    do
    	{
    		循环体
    	}&
    done
    ==========当条件为真时,执行循环体,&表示后台执行============
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    【Azure API 管理】API Management如何有效且快速更新呢?如对APIs/Policy等设置内容
    ElasticSearch7.3学习(二十八)----聚合实战之电视案例
    STM32F429主控TB6612驱动直流电机----解决PWM波形未输出bug
    知识分享 钡铼网关功能介绍:使用SSLTLS 加密,保证MQTT通信安全
    java反射的使用
    网络安全笔记2——单钥密码体制
    【论文阅读】CTAB-GAN: Effective Table Data Synthesizing
    软件设计模式总结
    读《高性能MySQL》笔记---索引
    【毕业设计】基于STM32自行车智能无线防盗报警器 -物联网 单片机 嵌入式
  • 原文地址:https://blog.csdn.net/weixin_57789471/article/details/138076938