我编写了一个用于双重身份验证的shell脚本。这是在if语句中执行时出现错误。
#!/usr/bin/Expect
#!/bin/bash
set cpPass "App12345"
set server [lindex $argv 0]
set pass "App12345@123"
set app "app1"
set appPass "app@1013"
spawn ssh user1@$server.corp.clll.com
expect {
"(yes/no)?" {
send "yes\r"
expect "password:"
send "$cpPass\r"
}
"password:" {
send "$pass\r"
}
}
expect "bash"
send "su - $app\r"
expect "Password:"
send "$appPass\r"
if [ "$server" == "server1" ]
then
send "cd /ngs/app/genevad/QA/site/distribution/servers1\r";
else
send "sqlplus gqa_owner/App#789@dbgeneva01d.corp.clll.com:1700/app1D\r";
fi
interact此错误与执行命令时的情况类似./script.sh server1
invalid command name "server1"
while executing
""$server" == "novello" "
invoked from within
"if [ "$server" == "novello" ]"
(file "./script.sh" line 28)我尝试过各种组合,比如: if $server == "novello“if $server -eq "novello”if "$server“-eq "novello”等等,但仍然无法工作。对此有何建议/解决办法?
发布于 2014-11-04 06:37:59
问题在于:
#!/usr/bin/Expect
#!/bin/bash不能在相同的Unix脚本中使用2打包带。只有第一个生效,第二个将被忽视。因此,您的脚本必须是完全符合expect的脚本(因为这是第一个脚本--应该是小写的expect )。
当您尝试在其中使用bash语法时,您将得到错误,因为bash特定的脚本将由expect解释。
发布于 2014-11-04 06:46:49
将代码[$server == "server1"]替换为{$server == "server1"}。正如阿努巴瓦所指出的,你不需要两个可执行的名字。您只能使用bash。包含所有带有-c标志的expect代码。要了解有关如何使用expect与-c标志的更多信息,请查看https://stackoverflow.com/a/26607110/974155
https://stackoverflow.com/questions/26729001
复制相似问题