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.sh
chmod +x xscp.sh
脚本命令:
#!/bin/bash
for 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/
fi
done
示例示例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.sh
chmod +x xcall.sh
脚本命令:
#!/bin/bash
params=${@:2}
for line in `cat $1`
do
echo "============= {print %s, $line} $params ============="
ssh $line "$params"
done
示例1:
./xcall.sh ip.txt hostname