悄悄用shell加expect搞定繁重任务,和女神约会去(代码片段)

Friendsofthewind Friendsofthewind     2022-12-22     208

关键词:

任务:

1、主机存活检查脚本

用for和while两种方式 ,读取hostip.txt主机清单, 实现 显示 主机存活状态。

第一种方法:for循环,适用场景,主机数较少。
1)创建主机列表文件

2)编辑脚本:

#!/bin/bash

LIST=`cat ipadds.txt`

for IP in $LIST
do
    ping -c 3 -i 0.2 -W 3 $IP &> /dev/null

    if   [ $? -eq 0 ]
    then
         echo "host $IP is up!"
    else
         echo "host $IP is down!"
    fi
done

3)验证:

第二种方法:while循环,适用场景,主机数多,某一网段。

1)编辑脚本
分析:可以将不在线和在线的主机分别存在两个文件里

#!/bin/bash
myping()              //定义函数myping
ping -c4 -i0.1 -W1  192.168.2.$i  &> /dev/null
if [ $? -ne 0 ];then
  echo  192.168.2.$i  >> down.txt
else
  echo  192.168.2.$i  >> up.txt
fi

i=1               //定义变量i初始值为1
>down.txt
>up.txt
while [ $i -lt 6 ]    //当i小于6则执行下面命令(此处根据具体需要测试的主机网段填)
do
  myping &           //调用前面函数
  let i++            //i的值,叠加
done
sleep 2              //休眠2秒
echo  "不在线的主机:"  //显示提示信息,可以自定义
echo -n  `sort -n down.txt `   //sort -n屏幕输出:按数字大小排序
echo
echo  "在线的主机:"    //显示提示信息,可以自定义
echo -n `sort -n up.txt `
echo
                         

截图:注意,空格什么不能少;网段可根据实际情况填写;网段也是,为测试方便,只测试2.1~2.6

3)验证:

2、3台主机做免密登录

master、 node1、node2 要求写shell脚本结合expect方式 自动实现,没有人工干预。
1)检查环境(保证master主机和节点主机可以ping通,关闭防火墙;setenforce或者设置安全策略)


2)master主机:

编辑脚本

内容如下:注意,提前配置好yum仓库;expect行,前面不要用空格,使用Table键,既能看起来,清晰,又不会报错!!!

#!/bin/bash
cat > /root/hosts << E
192.168.2.2 root 123456
192.168.2.3 root 123456
E
yum -y install expect  &> /dev/null   
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa  //注意:""之间无空格
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
while read line
 do
   user=`echo $line | cut -d " " -f 2`    //注意:" "之间有空格
   ip=`echo $line | cut -d " " -f 1`
   passwd=`echo $line | cut -d " " -f 3`
expect  <<EOF
        set     timeout 10
        spawn   scp     -r /root/.ssh $ip:/root
        expect  
        "yes/no"  send "yes\\n";exp_continue 
        "password"  send "$passwd\\n" 
        
        expect "password"  send "$passwd\\n" 
EOF
        done < hosts


截图:

3)为脚本设置权限,并执行脚本(注意,只能使用source或 .的方式执行)

3)验证:执行脚本完成,登录任意节点,不用输入密码。


shell之expect应答语句(用shell脚本实现获取批量主机存活信息)(代码片段)

expect应答语句我们写脚本的目的就是为了自动执行,但是有些命令需要输入参数才可以执行,比如ssh远程连接时,会要求输入密码,输入成功才可以执行后面的操作,有时还需要先输入yes认证完再输入密码ÿ... 查看详情

在 WPF 的另一个对话框中运行繁重任务时运行启动对话框

】在WPF的另一个对话框中运行繁重任务时运行启动对话框【英文标题】:RunningsplashdialogwhilerunningheavytaskinanotherdialoginWPF【发布时间】:2021-01-2008:49:17【问题描述】:我正在尝试执行标题中描述的任务。HeaviWindow执行一些繁重的任... 查看详情

shell中expect使用

我写了一个shell脚本,如下:#!/bin/shexpect<<!spawnsuexpect"Password:"send"pwd"touchfile1expecteof!由于shell脚本是在User下执行,现在我希望在脚本中做的是切到root下,然后创建一个file现在问题是,它不会执行touchfile1这个动... 查看详情

linuxspawn命令

...lidcommandname"spawn",但是在/usr/local/bin/目录下执行./expect后使用spawn却可以成功,并且,我明明在脚本里面已经指明了expect的路径啊,为什么脚本会报错呢,在线等,谢谢spawn是进入expect环境后才可以执行的expect内部命令。ex... 查看详情

go语言打造分布式crontab轻松搞定高性能任务调度

第1章课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。第2章如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,... 查看详情

shell进阶——expect免交互工具的使用(代码片段)

前言:  expect是什么?答:expect是由DonLibes基于Tcl(ToolCommandLanguage)语言开发的,主要应用于自动化交互式操作的场景,是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现... 查看详情

CPU 百分比和繁重的多线程

】CPU百分比和繁重的多线程【英文标题】:CPUpercentageandheavymulti-threading【发布时间】:2019-06-2409:19:15【问题描述】:我观察到CPU百分比的奇怪影响,例如Linux(Ubuntu16.04)上的top或htop用于一个特殊应用程序。该应用程序使用许多线... 查看详情

shell之expect应答语句(用shell脚本实现获取批量主机存活信息)(代码片段)

expect应答语句我们写脚本的目的就是为了自动执行,但是有些命令需要输入参数才可以执行,比如ssh远程连接时,会要求输入密码,输入成功才可以执行后面的操作,有时还需要先输入yes认证完再输入密码ÿ... 查看详情

java程序员和三八女神节有什么神秘的关系,你晓得吗?用java给女神绘制一张贺卡你会吗?(代码片段)

文章目录java技术和三八女神节有什么关系?java核心技术指的是哪些技术?作为Java程序员三八女神节能做些什么呢?作为Java程序员三八女神节如何用java语言绘制一张贺卡呢?结语java技术和三八女神节有什么关系&... 查看详情

2018-4-2518周1次课分发系统-expect讲解(上)

...别发布到机器上去分发系统就是上线的shell脚本,核心为expectexpect是一种脚本语言,和shell很像,可以用它去实现传输文件和远程执行命令,不需要去输入密码20.28expect脚本远程登录[[email protected] ~]# yu 查看详情

linuxshell脚本和tcnexpec混合的问题

...一个脚本,首先处理一些数据,然后登录一台服务器,用expect输入交互密码,再输入执行一些操作用到shell脚本和tclexpect,我想写成一些以下这样问题有两个一、行1和行2怎么共同起作用?实际效果是只有第一行起作用二、行7如何... 查看详情

shell基础之管道符和变量

...令就是把前面输出的结果交给后面的命令2.ctrlz暂停一个任务3.jobs查看后台的任务4.bg[id]把任务调到后台,使它到后台运行background运行多个任务要使用bg 1 bg 2,如果不加参数 就是默认的最后一个运行的程序5.fg[id]把... 查看详情

/usr/bin/expect介绍

/usr/bin/expect介绍概述我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而Expect就使用来实现... 查看详情

实验吧—女神又和大家见面了

用foremost提取 MP3Stego分离出music.mp3.txtbase64解码—SimCTFMP3_MP3_sdfdsf  查看详情

go语言开发分布式任务调度轻松搞定高性能crontab

第1章课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1导学视频第2章如何执行shell命令执行"定时任务"其实就是执行"shell命令"。... 查看详情

如何为 elasticsearch 模拟繁重的磁盘 / io 负载

】如何为elasticsearch模拟繁重的磁盘/io负载【英文标题】:howtosimulateheavydisk/ioloadforelasticsearch【发布时间】:2020-12-2516:20:10【问题描述】:我的任务是制作一个弹性搜索磁盘/io“艰苦的生活”:-)。为了不重新发明***-有没有一种工... 查看详情

如何在bashshell脚本中使用expect

参考技术A1、首先检查你机器上有没有expect(我知道ubuntu默认是没有安装的)ls/usr/bin|grepexpect看看有没有装expect2、没有的话需要安装在ubuntu的软件安装中心,搜索tcl和tk和expect并安装;也可以命令行输入sudoapt-getinstalltcltkexpect3.环... 查看详情

centos6.3上搭建expect无交互开发环境

...工来干预,而对于这种方式是违反无人职守的原则;现在expect就解决了这个问题,Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。   Expect是在Tcl基础上创建起来的,用来做一... 查看详情