广告
返回顶部
首页 > 资讯 > 精选 >shell脚本中批量复制及执行命令的示例分析
  • 311
分享到

shell脚本中批量复制及执行命令的示例分析

2023-06-09 12:06:47 311人浏览 八月长安
摘要

这篇文章主要介绍了shell脚本中批量复制及执行命令的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。平时在处理一个或几个机器运行环境时,一个机器一个机器处理也能接受,

这篇文章主要介绍了shell脚本中批量复制及执行命令的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

平时在处理一个或几个机器运行环境时,一个机器一个机器处理也能接受,但是如果是一批机器,几十或几百台,要是一台一台去安装环境,光是输入同一的命令,估计你自己都想吐,所有聪明的人会想一些偷懒的办法,确实可以找到一些省时省力的方法,比如写一个批量处理shell脚本,这几天在处理一批(八九十台)机器环境,找了一些批量处理的脚本,包括批量传输(scp)文件到多台机器上、批量执行命令到多台机器、还有需要交互的命令,下面记录一些这些命令:

机器IP文件:ip.txt

192.168.10.201 192.168.10.202 192.168.10.203 192.168.10.204 192.168.10.205

另外所有机器要可以从一台机器通过ssh无密登录其他机器

1.批量传输(scp)文件到一批机器上

创建脚本文件,并修改为可执行文件

touch xscp.shchmod +x xscp.sh

脚本命令:

#!/bin/bashfor line in `cat $1`do if [ "$3" == "" ] then # dir echo scp -r $2/ $line:$2/ scp -r $2/ $line:$2/ else # files echo scp ${@:3} $line:$2/ scp ${@:3} $line:$2/ fidone

示例1:指定要传输的文件

./xscp.sh ip.txt /opt/soft/ filename1 filename2 ...

第一个参数($1):ip.txt 是一个以换行符分割的IP集合,每个IP占一行

第二个参数($2):/opt/soft/  文件要传输到目标机器的目录

第三个及以后n个参数(${@:3}):为要传输的文件或文件集合

示例2:不指定文件

./xscp.sh ip.txt /opt/soft/

如果不指定要传输的文件,会默认传输第二个参数($2)目录(/opt/soft)下的所有文件,到目标机器对应的目录(/opt/soft)下

2.批量执行命令脚本(无交互)

创建脚本文件,并修改为可执行文件

touch xcall.shchmod +x xcall.sh

脚本命令:

#!/bin/bashparams=${@:2}for line in `cat $1`do echo "============= {print %s, $line} $params =============" ssh $line "$params"done

示例1:

./xcall.sh ip.txt hostname

第一个参数($1):ip.txt 要通过ssh执行命令的机器ip集合

第二个及后续n个参数(${@:2}):视为要执行的整个命令,最好整个命令用双引号引起,如下示例

示例2:

./xcall.sh ip.txt "rpm -qa | grep lzo"

3.批量执行命令脚本(有交互)

有些时候批量向其他机器执行脚本,需要交互,比如安装软件时,需要确认(输入yes/no),需要输入密码等,如果人工输入,上百台机器估计够费劲,所有在执行批量脚本时,让其自动交互,显得很实用,下面以expect来实现自动互动交互举几个小示例。

expect是一个自动交互功能的工具,可以满足代替我们实际工作中需要从终端手动输入某些内容来使得程序或命令继续运行的目的。如安装软件是时的一些提示,ssh远程主机执行命令时需要多次输入密码的情况。

首先在执行脚本的机器上要安装expect软件包

yum -y install expect

一些expect基本命令:

  • spawn :启动新进程,用于执行shell命令;

  • expect :从发起交互的命令的进程接受字符串,用于匹配我们预想的字符串;

  • send :用于向发起交互的命令的进程发送字符串;

  • interact:允许用户交互,即此命令后,交互将不会由expect进行,将交回给用户;

示例1:

创建脚本文件并修改为可执行文件:

touch xcall-keytool-list.shchmod +x xcall-keytool-list.sh

脚本命令:

#!/bin/bashparams=${@:2}for line in `cat $1`do echo "============ $line $params =============" /usr/bin/expect << EOF set time 20 spawn ssh $line "$params" expect { "*passWord:"  { send "changeit\r" }  } expect eofEOFdone

命令执行 在查询java证书库时需要输入java证书库密码(changeit):

./xcall-keytool-list.sh ip.txt "/home/software/java/bin/keytool -list -keystore /home/software/java/jre/lib/security/cacerts | grep baidu"

第一个参数($1):ip.txt 要执行命令的机器IP集合文件

第二个及后面n个参数(${@:2}):为要执行的命令

示例2:更为通用的脚本命令

创建脚本文件并修改为可执行文件:

touch xcall-interaction.shchmod +x xcall-interaction.sh

脚本命令:

#!/bin/bash# IP文件iptxt=$1# 要执行的命令command=$2# 交互时输入项(yes/no|password)initem=$3# 交互输入内容(yes | 密码)input=$4echo "--- command:$command ---"echo "--- 输入项:$initem ---"echo "--- 输入内容:$input ---"for line in `cat $iptxt`do echo "============ $line $command =============" if [ "$initem" = "" ] then ssh $line "$command" else /usr/bin/expect << EOF set time 20 spawn ssh $line "$command" expect {  "*$initem:"  { send "$input\r" }  } expect eofEOF fidone

执行命令:

./xcall-interaction.sh ip.txt "/home/software/java/bin/keytool -list -keystore /home/software/java/jre/lib/security/cacerts | grep baidu" password changeit

第一个参数($1):ip.txt 要执行命令的机器IP集合文件

第二个参数($2):为要执行的命令,用双引号

第三个参数($3):为输入项,这里是password(输入密码),或者输入yes/no等,如果没有第三个参数,则当成非交互命令执行

第四个参数($4):为输入项要输入的内容,如输入项是password时,此项输入密码;如果输入项是yes/no时,一般输入yes

知识点补充:下面看个shell脚本范例---批量复制

脚本目的:工程包的增量替换与升级,增量包放在src目录下,目标包放在dest目录下

#!/bin/bashfunction replace(){  for file in `ls $1`  do    for file1 in `ls $2`    do    if [ $file1 = $file ];    then      cp -f $1"/"$file $2      echo ${file}+++${file1}      flag="1"    fi    done  if [ $flag != "1" ]  then  cp -f $1"/"$file $2  fi  flag="0"  done}src="/home/cms/app/OpenAS_Tomcat7/WEBapps/src"dest="/home/cms/app/OpenAS_Tomcat7/webapps/test"replace $src $dest

第三行:对源文件夹下的文件遍历循环,``会将包含的命令的输出放在相应位置,$1,$2取得是函数的入参

第七行:if条件判断,[ 后有空格,=前后要有空格;=无空格会被认为是赋值

shell脚本里赋值使用的是不带空格的=,条件判断使用的是带空格的=

感谢你能够认真阅读完这篇文章,希望小编分享的“shell脚本中批量复制及执行命令的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: shell脚本中批量复制及执行命令的示例分析

本文链接: https://www.lsjlt.com/news/256016.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • shell脚本中批量复制及执行命令的示例分析
    这篇文章主要介绍了shell脚本中批量复制及执行命令的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。平时在处理一个或几个机器运行环境时,一个机器一个机器处理也能接受,...
    99+
    2023-06-09
  • shell脚本批量复制及执行命令的示例详解
    平时在处理一个或几个机器运行环境时,一个机器一个机器处理也能接受,但是如果是一批机器,几十或几百台,要是一台一台去安装环境,光是输入同一的命令,估计你自己都想吐,所有聪明的人会想一些偷懒的办法,确实可以找到一些省时省力的...
    99+
    2022-06-04
    shell脚本批量复制 批量复制执行命令
  • Spark-shell批量命令执行脚本的方法
    批量执行spark-shell命令,并指定提交参数 #!/bin/bash source /etc/profile exec $SPARK_HOME/bin/spark-shell --queue tv --na...
    99+
    2022-06-04
    Spark shell 执行脚本
  • hbase-shell批量命令执行脚本的方法
    批量执行hbase shell 命令 #!/bin/bash source /etc/profile exec $HBASE_HOME/bin/hbase shell <<EOF truncate...
    99+
    2022-06-04
    hbase shell 执行脚本
  • hive-shell批量命令执行脚本的实现方法
    如下所示: #!/usr/bin/bash HADOOP_HOME="/opt/module/cdh-5.3.6-ha/hadoop-2.5.0-cdh5.3.6" HIVE_HOME='/opt/module/cd...
    99+
    2022-06-04
    hive shell 命令
  • Linux命令行和shell脚本编程的示例分析
    小编给大家分享一下Linux命令行和shell脚本编程的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!第一个脚本文件代码如下:#!/bin/bashech...
    99+
    2023-06-09
  • linux中shell脚本实现root切换到普通用户执行脚本或命令的示例分析
    这篇文章将为大家详细讲解有关linux中shell脚本实现root切换到普通用户执行脚本或命令的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求:安装deb包,设置程序安装后启动,不需要root...
    99+
    2023-06-09
  • Linux Shell脚本多命令执行逻辑的示例详解
    目录简介一、分号二、&&三、||案例剖析简介 linux 中可以使用分号";“、双and号”&&“和双竖线”||"来连接...
    99+
    2022-10-16
  • Linux Shell脚本多命令执行逻辑的示例详解
    目录简介一、分号二、&&三、||案例剖析简介 Linux 中可以使用分号";“、双and号”&&“和双竖...
    99+
    2022-11-13
    Shell脚本多命令执行逻辑 Shell 多命令执行逻辑 Shell 多命令执行
  • Go执行脚本命令的使用实例分析
    这篇文章主要介绍“Go执行脚本命令的使用实例分析”,在日常操作中,相信很多人在Go执行脚本命令的使用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go执行脚本命令的使用实例分析”的疑惑有所帮助!接下来...
    99+
    2023-06-22
  • Shell命令行批量处理图片文件名的示例分析
    小编给大家分享一下Shell命令行批量处理图片文件名的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Shell 命令行批量处理图片文件名前言:从网上下载了...
    99+
    2023-06-09
  • python脚本与命令行结合的示例分析
    这篇文章将为大家详细讲解有关python脚本与命令行结合的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。脚本与命令行结合可以使用下面方法运行一个Python脚本,...
    99+
    2022-10-19
  • Redis中命令执行过程的示例分析
    这篇文章将为大家详细讲解有关Redis中命令执行过程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redis 是怎么执行远程客户端发来的命令的Redis cli...
    99+
    2022-10-18
  • Shell中管道及执行顺序的示例分析
    这篇文章主要介绍Shell中管道及执行顺序的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、基本概念 a、I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9; b、常用FD有3个,为0(...
    99+
    2023-06-09
  • clickhouse批量插入数据及ClickHouse常用命令的示例分析
    小编给大家分享一下clickhouse批量插入数据及ClickHouse常用命令的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.安装使用ClickHo...
    99+
    2023-06-29
  • linux中shell脚本编写和运行的示例分析
    这篇文章主要介绍了linux中shell脚本编写和运行的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。编写第一个shell脚本在gedit中编写.sh格式的文件,保存...
    99+
    2023-06-09
  • mysql增量备份及断点恢复脚本的示例分析
    这篇文章给大家分享的是有关mysql增量备份及断点恢复脚本的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只...
    99+
    2022-10-18
  • Python脚本开发中的命令行参数及传参示例详解
    目录sys模块argparse模块Python中的正则表达式 正则表达式简介Re模块常用的匹配规则sys模块 在使用python开发脚本的时候,作为一个运维工具,或者是其他...
    99+
    2022-11-13
  • Shell命令行中特殊字符与其转义的示例分析
    这篇文章将为大家详细讲解有关Shell命令行中特殊字符与其转义的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。特殊符号及其转义大家都知道在一个shell命令是由命令名和它的参数组成的, 比如 ca...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作