Как использовать имя аргумента / параметра в качестве переменной в скрипте bash

Я пытаюсь написать скрипт, который позволяет подключение к различным серверам, например

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

И я хотел бы запустить его так:

sh connect.sh server1

Не могу понять, как использовать имя параметра в качестве переменной. Массивы не работают на моем Ubuntu тоже.

3 ответа

Решение

Используйте опосредованную оболочку следующим образом:

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

Для вашего скрипта работают следующие:

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

arg1="$1"
ssh ${!arg1}

Самый простой способ - включить $1:

case "$1" in
  server1) ssh "$server1"
           ;;
  server2) ssh "$server2"
           ;;
  *) ssh "$server1" # when no parameter is passed default to server1
     ;;
esac

Попробуй это:

#!/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
Другие вопросы по тегам