多重执行xcall.sh

#!/bin/bash

# 遍历所有节点(集群主机列表)
for i in cdhmaster01 cdhmaster02 cdhmaster03 cdhnode01 cdhnode02 cdhnode03
do
  # 打印当前正在操作的主机,方便区分输出
  echo "--------- $i ----------"

  # 通过 ssh 在远程主机执行传入的命令
  # "$*" 表示把所有参数当作一个整体传过去
  # 例如:./xcall.sh pwd
  # 实际执行:ssh cdhmaster01 "pwd"
  ssh $i "$*"
done

集群分发xsync.sh

#!/bin/bash

if [ $# -eq 0 ]; then
  echo "Usage: $0  [more files_or_dirs]"
  exit 1
fi

hosts=(cdhmaster01 cdhmaster02 cdhmaster03 cdhnode01 cdhnode02 cdhnode03)
user=$(whoami)

for src in "$@"
do
  if [ ! -e "$src" ]; then
    echo "Not found: $src"
    continue
  fi

  abs_src=$(readlink -f "$src")
  name=$(basename "$abs_src")
  parent=$(dirname "$abs_src")

  for host in "${hosts[@]}"
  do
    echo "===== $host ====="

    ssh "$host" "mkdir -p '$parent'"

    if [ -d "$abs_src" ]; then
      rsync -av "$abs_src" "$user@$host:$parent/"
    else
      rsync -av "$abs_src" "$user@$host:$parent/"
    fi
  done
done