zoukankan      html  css  js  c++  java
  • shell 循环语句

    1、 shell中的循环语句

    循环语句,主要是为了简化重复动作代码,在运维方面主要用于重复某项动作,例如批量创建用户,在shell中主要有两种 while循环 与 for 循环。

    1、while循环

    while 循环主要用于无限次的循环情况,例如登录认证,你不知道多少次可以登录成功,当然可以认为限制登录次数。

    1.1、while循环 的结构
    #!/bin/bash
    while true
    do
    	echo "哈哈哈哈哈哈哈哈哈"  #循环体
    done
    
    1.2、 while循环脚本示例

    1)、while循环从文件读取用户,增加用户,并且设置密码。

    1、创建用户文件
    [root@localhost ~]# cat >123.txt<<-EOF
    love1
    love2
    love3
    love4
    love5
    EOF
    
    2、while 脚本
    #!/bin/bash
    rm -rf info.txt &>/dev/null
    while read user
    do
    	id $user &>/dev/null
    	if [ $? -ne 0 ];then
    		useradd $user &>/dev/null
    		pwd=`mkpasswd -l 10`
    		echo $pwd | passwd --stdin $user &>/dev/null
    		echo "$user:$pwd"|tee -a info.txt
    		echo " 用户 $user 添加成功..."
    	else
    	echo "$user 已经存在..."
    	fi
    done<123.txt
    

    2)批量添加指定前缀,数量的用户

    #!/bin/bash
    read -p "请输入用户前缀,密码,数量:" pre pass num
    if [[ ! $num =~ ^[0-9]+ ]];then
    	ehco "请输入数字"
    fi
    cat <<EOF
    	你输入的用户名前缀为:$pre
    	你设立的密码为:$pass
    	你设定用户个数为:$num
    EOF
    while true
    do
    read -p "你确定要创建?" ch
    case $ch in
    	y|yes)
    		for i in `seq $num`;do
    			id $pre$i &>/dev/null
    			if [  $? -ne 0 ];then
    				useradd $pre$i
    				echo "用户 $pre$i 创建成功..."
    				echo $pass|passwd --stdin $pre$i &>/dev/null
    			else
    				continue
    				echo "用户 $pre$i 已经存在..."
    			fi
    		done
    		break
    		;;
    	n|no)
    		exit 1
    		;;
    	*)
    		echo "错误输入,请重新输入..."
    esac
    done
    
    

    3)、批量删除用户

    #!/bin/bash
    read -p "请输入用户前缀,数量:" pre num
    cat <<EOF
    	你输入的用户名前缀为:$pre
    	你设定用户个数为:$num
    EOF
    while true
    do
    read -p "你确定要删除?" ch
    case $ch in
    	y|yes)
    		for i in `seq $num`;do
    			id $pre$i &>/dev/null
    			if [  $? -eq 0 ];then
    				userdel -r  $pre$i
    				echo "用户 $pre$i 删除成功..."
    			else
    				continue
    				echo "用户 $pre$i 不存在..."
    			fi
    		done
    		break
    		;;
    	n|no)
    		exit 1
    		;;
    	*)
    		echo "错误输入,请重新输入..."
    esac
    done
    
    2、for 循环

    for 循环主要用于有限次数循环,例如测试一个网段内地ip是否通达,又或者我们要循环迭代一个文件的内容,我们可以for循环来完成工作

    2.1 for 循环结构
    for i in `seq 5` #可循环迭代的对象,例如一个打开的文件,{1..100}等
        do
    	echo "haha $i"  #循环体,for循环从中依次取值
        done
    
    
    2.2 for循环脚本

    1)检测子网段内ip的通达性

    #!/bin/bash
    for i in {1..200}
    do
        {
        ip=100.100.100.$i
        ping -c1 -w1 $ip
        if [ $? -eq 0 ];then
            echo "$ip"|tee -a ip.txt
       fi
    }&
    done
    wait
    cat ip.txt
    

    2)批量修改子网段ssh登陆密码

    #!/bin/bash
    for i in {10..200}
    do
    {
        ip=100.100.100.$i
        ping -c1 -w1 $ip &>/dev/null
        if [ $? -eq 0 ];then
            ssh $ip "echo 123456 |passwd --stdin root" &>/dev/null
            echo "$ip"|tee -a ch_ip.txt
        else
            echo "$ip"|tee -a er_ip.txt
        fi
    }&
    done
    

    3)、批量添加用户

    #!/bin/bash
    read -p "请输入用户前缀,密码,数量:" pre pass num
    if [[ ! $num =~ ^[0-9]+ ]];then
    	ehco "请输入数字"
    fi
    cat <<EOF
    	你输入的用户名前缀为:$pre
    	你设立的密码为:$pass
    	你设定用户个数为:$num
    EOF
    while true
    do
    read -p "你确定要创建?" ch
    case $ch in
    	y|yes)
    		for i in `seq $num`;do
    			id $pre$i &>/dev/null
    			if [  $? -ne 0 ];then
    				useradd $pre$i
    				echo "用户 $pre$i 创建成功..."
    				echo $pass|passwd --stdin $pre$i &>/dev/null
    			else
    				continue
    				echo "用户 $pre$i 已经存在..."
    			fi
    		done
    		break
    		;;
    	n|no)
    		exit 1
    		;;
    	*)
    		echo "错误输入,请重新输入..."
    esac
    done
    

    2、循环中用到的一些其他shell命令

    1、break 结束循环
    2、exit 退出整个脚本 
    3、continue 忽略本次循环剩余的代码,直接进⾏下一次循环
    
  • 相关阅读:
    print 带颜色打印
    bootstrap-duallistbox使用
    Linux 查看和更改系统字符集
    nginx 不重装实现动态添加模块
    ubuntu 安装openssh-server出现依赖关系解决
    linux安装和使用zookeeper
    网页背景蜘蛛丝特效
    RabbitMQ与SpringBoot整合
    Redis常用命令
    设计模式(Design Patterns)
  • 原文地址:https://www.cnblogs.com/hjnzs/p/12297290.html
Copyright © 2011-2022 走看看