循环

1、Shell循环:for

(1)语法结构

  1. for 变量名 [ in 取值列表 ]
    do
    循环体
    done

  2. 示例

  • for i in {1…10}
    do
    useradd “user$i”
    done

(2)ping测试主机

  1. 需求:通过循环工具,探测全网主机。将在线主机记录在文本中
  2. 示例
  • 1 编写常规网络测试脚本
    #!/bin/bash
    #ping
    ip=192.168.100.10
    ping -c1 -W1 $ip &> /dev/null
    if [                                   ?                          −                          e                          q                          0                          ]                          ;                          t                          h                          e                          n                          e                          c                          h                          o                          "                                 ? -eq 0 ] ;then echo "                    ?−eq0];thenecho"ip" |tee -a ip.txt
    fi

    2 因为测试对象多,所以使用循环。
    #!/bin/bash
    #ping

    for i in {2…254}
    do

    ip=192.168.100.$i
    ping -c1 -W1 $ip &> /dev/null
    if [                                   ?                          −                          e                          q                          0                          ]                          ;                          t                          h                          e                          n                          e                          c                          h                          o                          "                                 ? -eq 0 ] ;then echo "                    ?−eq0];thenecho"ip" |tee -a ip.txt
    fi

    done

    3 优化脚本(后台执行,清空脚本,wait间隔)

    #!/bin/bash
    #ping

    》ip.txt ##清空记录文本

    for i in {2…254}
    do
    {
    ip=192.168.100.$i
    ping -c1 -W1 $ip &> /dev/null
    if [                                   ?                          −                          e                          q                          0                          ]                          ;                          t                          h                          e                          n                          e                          c                          h                          o                          "                                 ? -eq 0 ] ;then echo "                    ?−eq0];thenecho"ip" |tee -a ip.txt
    fi
    }& ##后台执行
    done
    wait ##等待前一个程序执行完毕。在执行下一个命令。
    echo “finishi…”

(3)通过用户列表文件创建用户

  1. 需求:用户可以使用参数的形式,自定义用户名文件。
    如果用户没有输入用户名文件,提示用户输入
    如果用户输入的不是文件,提示用户更正。
    启动循环创建用户
    如果用户已经存在,提示存在
    如果用户不存在,则创建成功,提示成功
  2. 示例
  • #!/bin/bash
    #name
    #time
    pass=123
    #判断脚本是否有参数
    if [ $# -eq 0 ] ;then
    echo “usage:$0 filename "
    exit 1
    fi
    #判断用户输入的是否是文件
    if [ ! -f $1 ];then
    echo “error filename”
    exit 2
    fi
    #设置循环,读取文件,创建用户
    for user in `cat $1``
    do
    id $user &> /dev/null
    #如果用户不存在,则创建用户,否则提示已经存在。
    if [ $? -eq 0 ];then
    echo “user $user already exists”
    else
    useradd                               u                         s                         e                         r                         e                         c                         h                         o                         "                            user echo "                 userecho"pass” | passwd --stdin $user &> /dev/null
    #判断用户是否创建成功,并提示
    if [                               ?                         −                         e                         q                         0                         ]                         ;                         t                         h                         e                         n                         e                         c                         h                         o                         "                            ? -eq 0 ] ; then echo "                 ?−eq0];thenecho"user is created."
    fi
    fi
    done

(4)使用for实现批量主机root密码的修改

  1. 完成秘钥登录配置(ssh-keygen—在129免密登录134)
  • 两台centos:192.168.142.134 192.168.142.129:跳板机
  • ssh-keygen //在129生成秘钥
  • ssh-copy-id 192.168.142.134 //将129生成的秘钥传递给134
  • 输入134密码即可
  • ssh root@192.168.142.134
  1. 步骤
  • 邀请用户输入密码
  • 循环调用IP地址
  • 执行远程修改(ssh 192.168.122.20 “touch ~/ddd.txt”)
  • 记录执行结果
  1. 示例
  • #邀请用户输入新密码
    read -p “请用户输入新密码: " password
    #循环调用IP地址
    for i in $(cat ip.txt)
    do
    {
    #测试IP是否在线
    ping -c1 -W1 $i &> /dev/null
    #在线IP进行修改
    if [ $? -eq 0 ] ;then
    #修改密码
    ssh $i “echo $password | passwd --stdin root”
    #修改成功与否并记录
    if [                               ?                         −                         e                         q                         0                         ]                         ;                         t                         h                         e                         n                         e                         c                         h                         o                         "                            ? -eq 0 ] ;then echo "                 ?−eq0];thenecho"i” >> ok.txt
    else
    echo $i >> fail.txt
    fi
    #不在线的主机记录。
    else
    echo $i >> meigai.txt
    fi
    } &
    done

2、Shell循环:while until

(1)while语句结构

  1. 语法结构
  • while 条件测试
    do
    循环体
    done
    ==当条件测试成立(条件测试为真),执行循环体
  1. 示例
  • 每秒显示一个数字,一次递增+1
    while :
    do
    let i++
    sleep 1
    echo $i
    done

(2)until语法结构

  1. 语法结构
  • until 条件测试
    do
    循环体
    done
    ==当条件测试成立(条件测试为假视为成立),执行循环体
  1. 示例
  • #!/bin/bash
    until [[ $i -eq 14 ]]
    do
    let i++
    sleep 1
    echo $i
    done

3、expect

  1. 安装:yum install -y expect tcl tclx tcl-devel
  2. 示例1:通过expect解决ssh交互问题
  • #!/usr/bin/expect
    spawn ssh root@192.168.0.111

    expect {
    “yes/no” { send “yes\r”;exp_continue }
    “password:” { send “666666\r” };
    }
    interact

  • spawn expect 内部命令,启动一个shell程序。

  • expect 期望哪些内容

  • yes/no 就send发送 yes ,\r 表示回车

  • exp_continue,跳过循环,就继续下一条语句。

  • interact 允许用户交互

4、总结

  1. 使用case实现成绩优良差的判断
  2. for创建20用户
    用户前缀由用户输入
    用户初始密码由用户输入
    例如:test01,test10
  3. for ping测试指网段的主机
    网段由用户输入,例如用户输入192.168.2 ,则ping 192.168.2.10 — 192.168.2.20
    UP: /tmp/host_up.txt
    Down: /tmp/host_down.txt
  4. 使用for实现批量主机root密码的修改
    成功或失败都必须记录
    提示:主机IP存放在一个文件中
    SSH:实现公钥认证,执行远程中主机命令
    实现公钥认证

#ssh-keygen 在用于管理的主上生成密钥对

#ssh-copy-id -i 192.168.2.3

  1. 示例
  • #!/bin/bash
    read -p “请输入你考试的分数:” score
    case “$score” in
    【0-59】)
    echo “您没有及格,请下次努力!”
    ;;
    【60-79】)
    echo “您的成绩及格,请更加努力!”
    ;;
    【80-89】)
    echo “您的成绩为良好,请再接再厉!”
    ;;
    【90-100】)
    echo “您的成绩为优秀,请再接再厉!”
    ;;
    *)
    echo “您输入的成绩超出合理值,请重新输入!”
    ;;
    esac
©著作权归作者所有:来自51CTO博客作者青云文质的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. jQuery常用操作; jQuery中的$.ajax方法; Vue基本术语与插值语法---
  2. 个人用户怎样选择最适合的阿里云服务器?
  3. 关于修改密码带特殊符号以及数据泵参数设置的一些小知识(2)
  4. 侵害10亿用户隐私,QQ、小米金融、搜狐新闻等41款App被通报
  5. 用户表空间配额(User tablespace Quota)
  6. 一种新的Android恶意软件HiddenMiner,影响印度和中国的用户
  7. 一步一步搭建11gR2 rac+dg之DG 机器配置(七)
  8. Servlet过滤器使用实例(防止用户恶意登录)
  9. 神策数据张涛:微信生态数字化运营解决方案

随机推荐

  1. Android开发学习系列-----开发环境准备
  2. 如何启动Android SDK 1.5模拟器
  3. 初涉Android之文件保存
  4. 分享偶的android秘籍
  5. Android(安卓)自定义EditText, 增加设置
  6. 真实可行的android 基站定位代码
  7. Android Studio Gradle 添加.so 支持文件
  8. Android项目打包、Eclipse视图和UI控件
  9. Android保存数据几种常用方法解析
  10. Android:ANT打包常见问题简述