我是靠谱客的博主 坚定鲜花,最近开发中收集的这篇文章主要介绍shell编程 循环一、shell循环:for二、shell循环:while until三、 expect,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

循环

  • 一、shell循环:for
    • 1. 案例1:ping 测试主机
    • 2. 案例2:通过用户列表文件创建用户
    • 3. 案例3:使用for实现批量主机root密码的修改
  • 二、shell循环:while until
    • 1. while 语法结构
    • 2.until 语法结构
  • 三、 expect
    • 1. 案例1:通过expect解决ssh交互问题
    • 2. 案例2

一、shell循环:for

  • 语法
    for 变量名 [ in 取值列表 ]
    do
    循环体
    Done
  • 示例:要求自动循环创建10个用户
 for i in {1..10}
do
        useradd  "user$i"
done

1. 案例1:ping 测试主机

通过循环工具,探测全网主机。将在线主机记录在文本中。
[root@tianyun scripts]# cat ip.txt
172.16.8.100
172.16.8.4
172.16.100.254

#!/bin/bash/
#ping
>ip.txt		##清空记录文本

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

2. 案例2:通过用户列表文件创建用户

[root@tianyun scripts]# cat user.txt
qianqian
qifeng
fengfeng

#!/bin/bash
for user in `cat user.txt`
do
useradd $user
echo "$user is created"
done

3. 案例3:使用for实现批量主机root密码的修改

前提1:已经完成秘钥登录配置(ssh-keygen)
前提2:定义主机地址列表
前提3:并了解远程修改密码的方法

1 邀请用户输入密码
2 循环调用IP地址
3 执行远程修改(ssh 192.168.122.20 “touch ~/ddd.txt”)
4 记录执行结果
在这里插入图片描述

二、shell循环:while until

1. while 语法结构

while语句结构(死循环/逐行处理文件)
while 条件测试
do
循环体
done
==当条件测试成立(条件测试为真),执行循环体

每秒显示一个数字,一次递增+1
while :
do
let i++
sleep 1
echo $i
done

2.until 语法结构

until语法结构
until 条件测试
do
循环体
done
==当条件测试成立(条件测试为假视为成立),执行循环体

#!/bin/bash
until  [[ $i -eq 14 ]]
do
let i++
sleep 1
echo $i
done

三、 expect

观察ssh登录的交互现象
安装expect:yum install -y expect

1. 案例1:通过expect解决ssh交互问题

#!/usr/bin/expect
spawn ssh root@192.168.0.111

expect {
        "yes/no" { send "yesr";exp_continue }
        "password:" { send "666666r" };
}
Interact


注释:
spawn expect 内部命令,启动一个shell程序。
expect 期望哪些内容
yes/no 就send发送 yes ,r 表示回车
password 就send发送 centos
exp_continue,跳过循环,就继续下一条语句。
interact 允许用户交互

2. 案例2

准备工作:安装expect,准备公钥

#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#使用for循环ping测试主机是否在线。
for i in {2..254}
do
        {
#请注意练习环境的IP地址,可能与示例中不同。
        ip=192.168.0.$i
        ping -c1 -W1 $ip &> /dev/null
        if [ $? -eq 0 ];then
        echo "$ip" >> ip.txt
        fi
        }&
done

通过expect进行交互
#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#使用for循环ping测试主机是否在线。
for i in {2..254}
do
        {
#请注意练习环境的IP地址,可能与示例中不同。
        ip=192.168.122.$i
        ping -c1 -W1 $ip &> /dev/null
        if [ $? -eq 0 ];then
        echo "$ip" >> ip.txt

        /usr/bin/expect <<-EOF
set timeout 10
spawn ssh-copy-id $ip
expect {
        "yes/no" { send "yesr"; exp_continue }
        "password:" { send "centosr" }
}
expect eof
EOF
        fi
        }&
done
wait
echo "finishi..."


最后

以上就是坚定鲜花为你收集整理的shell编程 循环一、shell循环:for二、shell循环:while until三、 expect的全部内容,希望文章能够帮你解决shell编程 循环一、shell循环:for二、shell循环:while until三、 expect所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部