强大的批量shell命令

2016-06-02 睿璇儿
强大的批量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=$' '
#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 Port  $port   ====="
        ssh -p $port $host $@
        echo -e " "
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