Yasen
Yasen

Reputation: 3428

How to use an argument/parameter name as a variable in a bash script

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

Answers (3)

helpermethod
helpermethod

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

bbrady
bbrady

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

anubhava
anubhava

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

Related Questions