Shell脚本:将包装器参数传递给基础脚本

时间:2012-07-31 09:53:42

标签: shell parameters

我创建了一个包装器,它可以通过SSH使用以下参数执行给定的脚本

sshwrapper.sh <server> <script with path> <username> <password>

现在我想调用以下脚本:

start.sh param1 param2 param3 param4

stop.sh param1 param2 param3

使用相同的包装器。

是否有可能有一种机制,在将基本参数传递给包装器脚本后,我可以将剩余参数发布到底层脚本?

即。我想达到以下符号:

示例:

sshwrapper.sh server start.sh username password param1 param2 param3 param4 

应该调用

start.sh param1 param2 param3 param4 

sshwrapper.sh server stop.sh username password param1 param2 param3 

应该调用

stop.sh param1 param2 param3 

以通用的方式。

2 个答案:

答案 0 :(得分:3)

使用shift"$@"

SERVER="$1"
SCRIPT="$2"
USERNAME="$3"
PASSWORD="$4"
shift 4

"$SCRIPT" "$@"

示例:

$ cat sshwrapper.sh 
#!/bin/sh

SERVER="$1"
SCRIPT="$2"
USERNAME="$3"
PASSWORD="$4"
shift 4

echo "$SCRIPT" "$@"

$ ./sshwrapper.sh server stop.sh username password param1 param2 param3 
stop.sh param1 param2 param3

使用shift,您可以从命令行中删除第一个参数并转移其余参数:

$ set 1 2 3 4 5
$ echo "$@"
1 2 3 4 5
$ shift 3
$ echo "$@"
4 5

您在此处看到shift 3删除了前三个参数。

答案 1 :(得分:2)

我以前曾使用ssh在远程服务器上执行脚本,但为了让我的生活轻松,我设置了公钥认证,以允许无密码访问。

请参阅此文章以供参考

http://macnugget.org/projects/publickeys/

您可以使用命令行中的默认ssh工具执行带参数的远程脚本,如下所示

$ ssh user@server "script.sh param1 param2 param3"

可以按如下方式执行多个命令

$ ssh user@server "script1.sh param1 param2 param3; script2.sh param1 param2 param3"

E.g - 登录远程服务器并打印日期并获取正在运行的进程列表

$ ssh user@server "echo date; ps -ef | grep hello"

您可以将以上逻辑添加到脚本中,假设您要将其作为 ssh-wrapper 的一部分来调用,或者直接从命令行执行。

请确保在ssh部分使用“双引号”而不是'single'