将参数从窗口bat传递到UNIX shell脚本

时间:2017-08-28 12:20:42

标签: windows shell batch-file unix

我知道主题看起来非常熟悉并且有相同的答案,但我的问题是别的。我有一个 .bat 文件,其中我传递的数据超过 10个参数(我知道限制是9但我需要它。)它似乎工作正常。脚本在下面 - :

@ECHO OFF

setlocal EnableDelayedExpansion
set n=0
for %%a in (%*) do (
   set vector[!n!]=%%a
   set /A n+=1
)

SET sadminUser=%vector[0]%
SET sadminPassword=%vector[1]%
SET dsnProvider=%vector[2]%
SET dbUserName=%vector[3]%
SET schemaFilePath=%vector[4]%
SET ddldictschemalogPath=%vector[5]%
SET repositoryName=%vector[6]%
SET ddlimpschemalogPath=%vector[7]%
SET grantUserRole=%vector[8]%
SET userId=anyuser
SET host=myhost
SET password=password
SET datatable=%vector[9]%
SET indexTable=%vector[10]%
SET ddlimpschemalogPath2=%vector[11]%

echo %ddlimpschemalogPath2%


echo y | "C:\Program Files\PuTTY\plink" -ssh %userId%@%host% -pw %password% exit

"C:\Program Files\PuTTY\plink" -ssh %userId%@%host% -pw %password% "PATH=/bin:/usr/bin:/usr/local/bin /opt/siebel/w44gq8sw/DDL_Sync.sh %sadminUser% %sadminPassword% %dsnProvider% %dbUserName% %schemaFilePath% %ddldictschemalogPath% %repositoryName% %ddlimpschemalogPath% %grantUserRole% %datatable% %indexTable% %ddlimpschemalogPath2%"  > ddlSuccess.txt 2>&1

现在你看到我正在做 echo%ddlimpschemalogPath2%这是数组中的最后一个参数,我也可以看到正确的输出。

问题是当我尝试将这些参数传递到 UNIX Shell脚本时。您可以看到我正在使用putty命令行Plink在bat文件中进行操作。我也可以成功连接到 shell脚本,我试图回显shell脚本中所有传递的参数。但是面临一些问题。脚本在下面 - :

#!/bin/bash

sadminUser=$1
sadminPassword=$2
dsnProvider=$3
dbUserName=$4
schemaFilePath=$5
ddldictschemalogPath=$6
repositoryName=$7
ddlimpschemalogPath=$8
grantUserRole=$9
datatable=${10}
indexTable=${11}
ddlimpschemalogPath2=${12}


echo "$sadmimUser"
echo "$sadminPassword"
echo "$ddlimpschemalogPath2"

echo password | sudo -S -l
sudo host  << EOF

// Do something else
EOF

我发现了一个问题。在.bat我有一个名为 - :repositoryName的参数。当我echo %repositoryName%时,它会给"Siebel Repository"正确的输出。现在,当这个间隔值作为参数传递给shell script时,它会分成两个不同的值,所以:

脚本中的这两个参数有两个不同的值 - :

repositoryName=$7
ddlimpschemalogPath=$8

输出 - :

Siebel
repository

它应该是参数repositoryName=$7的一个值。给予价值Siebel Repository。为什么会这样?这可以解释为什么价值上涨和下跌吗?

正如您在.bat中看到的那样,我正在调用shell脚本,并传递从.bat文件中获取的参数,如下所示:

DDL_Sync.sh %sadminUser% %sadminPassword% %dsnProvider% %dbUserName% %schemaFilePath% %ddldictschemalogPath% %repositoryName% %ddlimpschemalogPath% %grantUserRole% %datatable% %indexTable% %ddlimpschemalogPath2%"  > ddlSuccess.txt 2>&1

您可以在.bat中看到上面的完整一行。

调用.bat文件 - :

dlSync.bat "SAD" "glob81" "gepf_DSN" "SIEBEL" "/global/u70/globepfdev/siebel/schema.ddl" "/global/u70/globepfdev/siebel/siebsrvr/log/dev2prod/output/expschem.log" "Siebel Repository" "/global/u70/globepfdev/siebel/siebsrvr/log/dev2prod/output/ddlsync1.log" "SSE_ROLE" "GLOB_DATA_SMALL" "GLOB_INDEX_SMALL" "/global/u70/globepfdev/siebel/siebsrvr/log/dev2prod/output/ddlsync2.log"

相同的参数传递给shell脚本。其中"Siebel Repository"分为2.谢谢

0 个答案:

没有答案