强大的批量shell命令
强大的批量shell命令
强大的批量shell命令
1、首先rsh或者ssh肯定在环境里肯定是正常的
2、配置nodes(所有被管理的节点hostname)
3、脚本
# cat dsh
#!/bin/sh
command=$@;
for I in `cat ./nodes|grep -v ^#`
do
echo $I;
rsh $I "$command";
done
command=$@ 这行的意思是 执行./dsh时候后面的命令
如下:
./dsh ls -a $@就是说的ls -a
$0就是该bash文件名
$?是上一指令的返回值
$*所有位置参数的内容:就是调用调用本bash shell的参数。
$@基本上与上面相同。只不过是
“$*”返回的是一个字符串,字符串中存在多外空格。
“$@”返回多个字符串。
还有$#返回所有位置参数的个数。
下面是一个for循环,意思是把nodes文件里的每个节点hostname赋值给I,相当于把nodes变成一个变量。调用i的时候就是调用nodes里面的节点。
下面是一个朋友玩的脚本 ,请参考:
脚本文件 IFS 作用为把分隔符改为 回车
[root@fangs sh]# cat w3.sh
#!/bin/bash
node="./hosts.txt"
IFS=$'\n'
#command=$@
for i in `cat $node |grep -v "#"`
do
port=22
new_port=$(echo $i|awk '{print $2}')
if [ ! -z $new_port ]; then
port=$new_port
fi
host=$(echo $i|awk '{print $1}')
echo -e "====== Host $host\tPort $port ====="
ssh -p $port $host $@
echo -e "\n"
done
脚本弄好了 还需要单独 写一个nodes节点文件 如果主机ssh监听端口不是 22 则把 端口 写在主机后面 用 tab 或空格 分开
[root@fangs sh]# cat hosts.txt
192.168.1.150
willbing.com 3700
运行结果
[root@fangs sh]# ./w3.sh date -R
====== Host 192.168.1.150 Port 22 =====
Sat, 11 May 2013 18:13:45 +0800
====== Host willbing.com Port 3700 =====
Sat, 11 May 2013 18:07:51 +0800
评论暂时关闭