机器列表:host0,host1, host2,host3,host4,host5
实现功能:在host0上面对其他机器执行指令
1、实现host0可以免密码登录host1-host5,这个可以自行百度
2、在host0的home目录下新建文件.scmd.sh如下:
#!/bin/sh
paserargs()
{
old_ifs="$ifs"
ifs=","
arr=($1)
ifs="$old_ifs"
hosts=()
for s in ${arr[@]}
do
if [[ $s =~ "-" ]]
then
ifs="-"
arr1=($s)
ifs="$old_ifs"
if [ ${#arr1[@]} == 2 ]; then
prix0=`echo ${arr1[0]} | grep '.*[a-za-z]' -o`
end0=`echo ${arr1[0]} | grep '[0-9]*$' -o`
prix1=`echo ${arr1[1]} | grep '.*[a-za-z]' -o`
end1=`echo ${arr1[1]} | grep '[0-9]*$' -o`
if [ $end0 -lt $end1 ]; then
max=$end1
min=$end0
else
max=$end0
min=$end1
fi
for i in `seq ${min} ${max}`
do
hosts =($prix0${i})
done
fi
else
hosts =($s)
fi
done
}
docommand()
{
for host in ${hosts[@]}
do
echo ""
echo host $host
ssh $host "$@"
done
return 0
}
if [ $# -lt 1 ]
then
echo "$0 cmd"
exit
fi
paserargs "$@"
docommand "$2"
echo "return from scmd"
3、在host0的home目录下的.bashrc文件加入如下代码
alias scmd="sh ~/.scmd.sh"
4、source是的.bashrc生效
[work@host0 ~]$source .bashrc
5、所有东西都配置好,大功告成!下面就是测试:scmd命令接收两个参数,第一个是机器名,第二个是操作的命令。这里第一个参数机器列表可以是连续的或者混合型,什么意思看下面
###host1 上执行'ls ~',列出host1的home文件
[work@host0 ~]$scmd host1 'ls ~'
###host1 和host2上执行
[work@host0 ~]$scmd host1,host2 'ls ~'
###host1、host2、host3和host5上执行
[work@host0 ~]$scmd host1-host3,host5 'ls ~'
###host1、host2、host4和host5上执行,创建文件夹test
[work@host0 ~]$scmd host1-host2,host4-host5 'mkdir ~/test'