2

I'm trying to write a script that allows connection to various servers, e.g.

#!/bin/bash
# list of servers
server1=10.10.10.10
server2=20.20.20.20
ssh ${$1}

And I'd like to run it like:

sh connect.sh server1

Can't figure out how to use the parameter's name as a variable. Arrays do not work on my Ubuntu too.

Yasen
  • 3,400
  • 1
  • 27
  • 22

3 Answers3

8

Use shell indirection like this:

x=5
y=x
echo ${!y}
5

For your script, following works:

#!/bin/bash
# list of servers
server1=10.10.10.10
server2=20.20.20.20

arg1="$1"
ssh ${!arg1}
anubhava
  • 761,203
  • 64
  • 569
  • 643
1

Easiest way would be to switch on $1:

case "$1" in
  server1) ssh "$server1"
           ;;
  server2) ssh "$server2"
           ;;
  *) ssh "$server1" # when no parameter is passed default to server1
     ;;
esac
helpermethod
  • 59,493
  • 71
  • 188
  • 276
0

Try this:

#!/bin/bash

# list of servers
server1=10.10.10.10
server2=20.20.20.20

if [ "$1" == "server1" ]; then 
    ssh $server1;
elif [ "$1" == "server2" ]; then 
    ssh $server2;
fi
bbrady
  • 1