2012-07-31 109 views
0

我创建了可以用下面的参数Shell脚本:传递包装参数对底层脚本

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

现在我想调用下面的脚本通过SSH执行给定的脚本的包装:

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 

寿ld invoke

stop.sh param1 param2 param3 

以通用的方式。

回答

3

使用shift"[email protected]"

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

"$SCRIPT" "[email protected]" 

例子:

$ cat sshwrapper.sh 
#!/bin/sh 

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

echo "$SCRIPT" "[email protected]" 

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

使用shift您可以通过命令行删除第一个参数,并转向其他地区:

$ set 1 2 3 4 5 
$ echo "[email protected]" 
1 2 3 4 5 
$ shift 3 
$ echo "[email protected]" 
4 5 

在这里你看即删除了shift 3前三个论点。

+0

优秀...我以为我的问题描述不够清楚,但你确实给了我一些我想要的东西。谢谢!! – SiB 2012-07-31 10:08:27

+0

很高兴为您效劳! – 2012-07-31 10:24:32

2

我已经使用ssh来执行以前在远程服务器上的脚本,而是为了让我的生活更轻松我建立公钥认证,允许密码的访问。

请参见本文参考

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

可以使用命令行缺省SSH工具参数执行远程脚本如下

$ ssh [email protected] "script.sh param1 param2 param3" 

可以如下执行的多个命令

$ ssh [email protected] "script1.sh param1 param2 param3; script2.sh param1 param2 param3" 

E.摹 - Loginto远程服务器和打印日期,并获得运行列表处理

$ ssh [email protected] "echo date; ps -ef | grep hello" 

您可以将上面的逻辑添加到您的脚本,假设你想调用这是属于你SSH-包装,或者直接从命令行执行。

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

+0

+1。用户名,密码只是为了显示包装器使用的一些参数。无论如何感谢您的回复。 – SiB 2012-07-31 13:34:05