2013-10-15 64 views
2

我正在尝试编写允许连接到各种服务器的脚本,例如,如何在bash脚本中使用参数/参数名称作为变量

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

而且我想运行它想:

sh connect.sh server1 

无法弄清楚如何使用参数的名称作为一个变量。数组也不适用于我的Ubuntu。

回答

8

用途外壳间接这样的:

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

+1非常好的技巧,但应该提到,这只是bash。 – helpermethod

+1

@helpermethod:谢谢,是的,这是BASH的问题,因为问题被标记为BASH。 – anubhava

+0

嗯获取错误“错误的替代”在这里ssh $ {!arg1}。有任何想法吗? – Lamy

1

最简单的办法是在$1切换:

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

试试这个:

#!/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