强大的批量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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值