Reputation: 3428
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.
Upvotes: 2
Views: 267
Reputation: 62185
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
Upvotes: 1
Reputation: 1
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
Upvotes: 0
Reputation: 785156
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}
Upvotes: 8