首页 > 系统相关 >使用Shell脚本实现批量执行工具

使用Shell脚本实现批量执行工具

时间:2024-06-05 13:00:41浏览次数:32  
标签:脚本 Shell group 批量 root print password local port

        能够实现自动化运维的有很多,比如Ansible,Puppet,SaltStack,那么今天给大家分享的是我自己用Shell实现的一个可以批量远程执行的工具,写着玩的,供大家参考学习,欢迎大家多提建议。

注意:该脚本使用了expect,所以需要提前安装

[root@localhost ~]# cat remote-group-command.sh 
#!/bin/bash 

# 定义配置文件名称
file_name="hosts.cfg"

# 定义函数来获取指定组的配置信息
get_group_info() {
    local group_name=$1
    local ip
    local user
    local password
    local port
    local cmd=$2
    local info=$(awk -v group="$group_name" '
        $0 ~ "^\\[" group "\\]$" { test=1; next }
        $0 ~ "^\\[" { test=0 }
        test && /^[^[:space:]]+/{ print $1, $2, $3, $4 }
    ' "$file_name")
    echo "$info" | while IFS= read -r line;do 
        # 获取相关信息
        ip=$(echo "${line}" | awk '{print $1}')
        user=$(echo "${line}" | awk '{print $2}' | awk -F '=' '{print $2}')
        password=$(echo "${line}" | awk '{print $3}' | awk -F '=' '{print $2}')
        port=$(echo "${line}" | awk '{print $4}' | awk -F '=' '{print $2}')

        # 执行命令
        runcmd "${ip}" "${user}" "${password}" "${port}" "${cmd}"
    done 
}


# 执行命令
runcmd() {
    local hostip=$1
    local user=$2
    local password=$3 
    local port=$4
    local cmd=$5

expect << EOF 
# 开启一个进程跟踪 ssh 命令,expect 只能捕捉该进程信息
spawn ssh -p ${port} ${user}@${hostip} 
expect {
"(yes/no)"
# 匹配的(yes/no)时自动输入yes,exp_continue 表示允许 expect 继续向下执行指令
{send "yes\r"; exp_continue}
"*password"
{send "${password}\r"}
}

expect "*#" {send "${cmd}\r"}
expect "*#" {send "exit\r"}

# 等待结束标记
expect eof; 
EOF
}


# 判断hosts.cfg是否有指定的组
check_group() {
    local group=$1
    grep -w "\[${group}\]" ${file_name} > /dev/null 2>&1
    if [[ "$?" -eq 0 ]]; then
        return 0
    else
        return 1
    fi
}

main() {
    while getopts "h:g:c:" opt; do
        case $opt in
            h)
                file_name=$OPTARG
                ;;
            g)
                group=$OPTARG
                ;;
            c)
                cmd=$OPTARG
                if [ -z "$cmd" ]; then
                    echo "no command"
                    exit 1
                fi
                ;;
            \?)
                echo "Usage: $0 -h hosts.cfg -g group -c cmd"
                exit 1
        esac
    done

    check_group $group
    if [[ "$?" -eq 0 ]]; then
        get_group_info $group $cmd
    else
        echo "group $group not exists"
        exit 2
    fi
}

# 检查是否传递了参数给脚本,如果没有,则显示帮助手册  
if [[ $# -eq 0 ]]; then  
    main -?
    exit 0  
fi

main "$@"
[root@localhost ~]# cat hosts.cfg 
[test]
192.168.207.165 username=root password=123 port=22
192.168.207.166 username=root password=123 port=22

[kgc]
192.168.207.167 username=root password=123 port=22
192.168.207.168 username=root password=123 port=22
192.168.207.169 username=root password=123 port=22
[root@localhost ~]# chmod +x remote-group-command.sh 
[root@localhost ~]# ./remote-group-command.sh -g test -c "ls"

标签:脚本,Shell,group,批量,root,print,password,local,port
From: https://blog.csdn.net/qq_33906471/article/details/139468236

相关文章

  • word怎么改成图片?四个专业的方法,批量把word转为图片
    传统的Word文档在分享时可能受到格式、字体、排版等多种因素的限制,导致接收方无法完全还原原文档的样式。而通过将Word文档转换为图片格式,可以确保文档内容的完整性和一致性,使接收方能够准确理解文档内容。此外,图片格式的文件更容易在社交媒体、论坛、博客等平台上进行分享和传......
  • 批量修改图片宽高的软件有哪些?细数几个图片处理软件
    批量修改图片的宽高,通常是在需要处理大量图片并且要求这些图片保持统一尺寸或适应特定尺寸需求时进行的操作。这种需求在多个领域和场合中屡见不鲜,例如,在网页设计和制作中,批量修改图片宽高是非常必要的步骤。为了保持网页的美观和整洁,设计师通常会将网页上的图片尺寸调整到统一......
  • Linux上的SQL Server使用bcp实用工具将数据批量复制到数据库表中
    Linux上的SQLServer使用bcp实用工具将数据批量复制到数据库表中。参考官方文档如下https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-migrate-bcp?view=sql-server-ver161、本文内容安装SQLServer命令行工具使用bcp导入数据使用bcp导出数据相关内......
  • 从当当网批量获取图书信息
    爬取当当网图书数据并保存到本地,使用request、lxml的etree模块、csv模块保存数据到本地。爬取网页的url为:http://search.dangdang.com/?key={}&act=input&page_index={}其中{}为搜索关键字,page_index为页码。爬取的数据包括:书名、作者、出版社、图书简介、出版日期、价格......
  • mysql常用脚本
    1.添加一列默认值0ALTERTABLE表名ADDSortint(11)DEFAULT0NULLCOMMENT'排序';2.MySql删除重复数据,保留最早创建的思路:新建一个临时表temp_ID存储upload_file表里的重复Id,upload_file根据temp_ID里的Id删除重复数据,最后删除临时表temp_ID。注:如果新建临时表-......
  • java项目部署脚本
    一、java项目部署脚本示例在Java项目中,部署脚本通常依赖于项目的构建工具(如Maven或Gradle)以及部署环境(如Docker、Tomcat、Kubernetes等)。以下是一个基于Maven和Shell脚本的Java项目部署示例,假设我们正在将应用部署到Linux服务器上的Tomcat容器中。1.前提条件Linux服务器已安......
  • java项目部署脚本
    一、java项目部署脚本示例在Java项目中,部署脚本通常依赖于项目的构建工具(如Maven或Gradle)以及部署环境(如Docker、Tomcat、Kubernetes等)。以下是一个基于Maven和Shell脚本的Java项目部署示例,假设我们正在将应用部署到Linux服务器上的Tomcat容器中。1.前提条件Linux服务器已......
  • 文心一言、通义千问、智谱清言、kimi,AI批量生成文章保存word软件2.0版说明
    AI批量生成文章2.0版已经打包上传,文末自行下载。AI批量软件工具集成了文心一言、通义千问、智谱清言、kimi一共18个接口。可同时选择5个不同接口,读取excel第2列多个内容生成文章,并保存word软件。每次最多5个不同接口多线程同时处理3行excel,直到excel所有行列内容处理完毕。同......
  • ado.net datetable批量新增
    publicQueryResultSqlBulkCopy(DataTabledt,stringtableName){try{connection.Open();using(varcopy=newSqlBulkCopy(connection)){copy.DestinationTableName=tableName;copy.WriteToServer(dt......
  • 初识bat脚本
    什么是bat脚本文件后缀名为.bat或者.cmd。bat脚本,也称为批处理脚本,顾名思义,批处理就是对某对象进行批量的处理。通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统。类似于Unix中的Shell脚本。目前Windows中的批处理包含两类:WindowsDOS(BAT)和PowerShellDOS......