Assign a command to a variable - Help

Hi,

I have the script below. When i assign SSH_COMMAND to "ssh -o ConnectTimeout=2 ${SERVER} ${AS_SUDO} ${COMMANDS}" and then execute it as ${SSH_COMMAND} I get the following error:

ssh: Could not resolve hostname sudo: Name or service not known
ssh: Could not resolve hostname sudo: Name or service not known

But when I run the command directly from the script, it works as expected. The script below is running as expected. Can you guys help?

#!/bin/bash
#set -x


function usage {
    echo "USAGE: ${0} [-nsv] [-f FILE] COMMAND"
    echo "-f FILE   Use to override the default file"
    echo "-n        Use for dry Run"
    echo "-s        Use to run the command with sudo"
    echo "-v        Use for verbose"
}


SERVERFILE="/vagrant/servers"

if [[ ! -e "${SERVERFILE}" ]]; then
    echo "File ${SERVERFILE} does not exist"
    exit 0

fi

if [[ ${#} -lt 1 ]]; then
    usage
fi

if [[ ${UID}  -eq 0 ]]
then
echo "Do not execute this as root, use -s instead"
fi


while getopts 'nsvf:' opt
do
    case "${opt}" in
        n)
            DRY_RUN="true"   ;;
        s)
            AS_SUDO="sudo" ;;
        f)
            SERVERFILE=${OPTARG}  ;;
        v)
            echo "verbose mode"    ;;
    esac
done
shift "$(( OPTIND-1 ))"

COMMANDS=${*}
SSH_COMMAND="ssh -o ConnectTimeout=2 ${SERVER} ${AS_SUDO} ${COMMANDS}"

if [[ ! -z ${DRY_RUN} ]]
then
    echo "DRY RUN: ${SSH_COMMAND}"
else
    for SERVER in $(cat ${SERVERFILE})
    do
        #${SSH_COMMAND}
        ssh -o ConnectTimeout=2 ${SERVER} ${AS_SUDO} ${COMMANDS}
    done
fi
ssh -o ConnectTimeout=2 ${SERVER} ${AS_SUDO} ${COMMANDS}

I think so

ssh -o ConnectTimeout=2 ${SERVER} "${AS_SUDO} ${COMMANDS}"

--- Post updated at 22:23 ---

No, the variable $SERVER is not set!

--- Post updated at 22:32 ---

Substitute and look at the output

echo ssh -o ConnectTimeout=2 $SERVER $AS_SUDO $COMMANDS

Stop escaping variables needlessly, please. Hard to read

Thanks.

But in the for loop, I am using the SERVER var:

for SERVER in $(cat ${SERVERFILE})
    do
        #${SSH_COMMAND} ---> Not working
        #ssh -o ConnectTimeout=2 ${SERVER} ${AS_SUDO} ${COMMANDS} -----> Working
    done

What should I do to make it work just by using $SSH_COMMAND?

true way

SSH_COMMAND="ssh -o ConnectTimeout=2 \$SERVER \$AS_SUDO \$COMMANDS"
...
eval $SSH_COMMAND

--- Post updated at 08:13 ---

or in single quotes

SSH_COMMAND='ssh -o ConnectTimeout=2 $SERVER $AS_SUDO $COMMANDS'
...
eval $SSH_COMMAND