Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash脚本中将参数名用作变量_Bash - Fatal编程技术网

如何在bash脚本中将参数名用作变量

如何在bash脚本中将参数名用作变量,bash,Bash,我正在尝试编写一个脚本,允许连接到各种服务器,例如 #!/bin/bash # list of servers server1=10.10.10.10 server2=20.20.20.20 ssh ${$1} 我想像这样运行它: sh connect.sh server1 无法确定如何将参数名称用作变量。数组在我的Ubuntu上也不起作用 像这样使用shell间接寻址: x=5 y=x echo ${!y} 5 对于您的脚本,以下工作: #!/bin/bash # list of ser

我正在尝试编写一个脚本,允许连接到各种服务器,例如

#!/bin/bash
# list of servers
server1=10.10.10.10
server2=20.20.20.20
ssh ${$1}
我想像这样运行它:

sh connect.sh server1

无法确定如何将参数名称用作变量。数组在我的Ubuntu上也不起作用

像这样使用shell间接寻址:

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

+这是一个非常好的技巧,尽管应该提到这只是bash。@helpermethod:谢谢,是的,这是为了bash,因为问题被标记为bash。不要运行它
sh connect.sh server1
bash connect.sh server1
@Lamy一样使用它,看起来你使用的是
sh
,而不是
bash
+1,但是,如果可以使用间接参数扩展,那么也应该使用数组。