#!/bin/bash
#< SSH into multiple servers and execute the same command on each

BASENAME="/usr/bin/basename"
ECHO="/bin/echo"
SSH="/usr/bin/ssh"
TR="/usr/bin/tr"

SERVERS=""
COMMAND=""
THISPROG=$( ${BASENAME} $0 )

function print_usage {
   {
      ${ECHO} "Usage: ${THISPROG} [-h] -s <server1,server2,..,servern> -c \"command\""
      ${ECHO} "       -c   Command to execute on each host"
      ${ECHO} "       -s   Comma delimeted list of hostnames"
      ${ECHO} "       -h   Print this help messsage"
   } >&2
}

function check_args {
   if [ "${SERVERS}" = "" -o "${COMMAND}" = "" ]; then
      ${ECHO} "Both -s and -c must be specified"
      exit 1
   fi
}

function do_ssh {
   SERVERS=$( ${ECHO} "${SERVERS}" | ${TR} ',' ' ' )
   for SERVER in ${SERVERS}; do
      ${ECHO} "===[ ${USER}@${SERVER} ${COMMAND} ]==="
      ${SSH} ${SERVER} "${COMMAND}"
   done
}

while getopts ":hc:s:" OPTION; do
  case ${OPTION} in
     "h")  print_usage && exit 0  ;;
     "c")  COMMAND="${OPTARG}"    ;;
     "s")  SERVERS="${OPTARG}"    ;;
     *  )  print_usage && exit 1  ;;
  esac
done

shift $(( ${OPTIND} - 1 ))

if [ "$#" -ne "0" ]; then
   print_usage && exit 1
fi

check_args
do_ssh

exit 0