我已经为双重身份验证编写了一个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)
我尝试了各种组合,如果: 如果[$ server ==" novello" ] 如果[$ server -eq" novello" ] 如果[" $ server" -eq" novello" ] 等但仍然无法正常工作。有什么建议/解决方案吗?
答案 0 :(得分:1)
问题出在这里:
#!/usr/bin/Expect
#!/bin/bash
你在同一个Unix脚本中不能拥有 2个shebang。只有第一个将生效,第二个将被忽略。因此,您的脚本必须是完全expect
兼容的脚本(因为这是第一个 - 尽管应该是小写的expect
)。
当您尝试在其中使用bash
语法时,您将收到错误,因为bash
特定脚本将由expect
解释。
答案 1 :(得分:1)
将代码[$server == "server1"]
替换为{$server == "server1"}
。正如anubhava指出的那样,你在shebang中不需要2个可执行的名字。您只能使用bash
。包含-c
标记的所有期望代码。要了解有关如何使用-c
标记的期望的更多信息,请查看https://stackoverflow.com/a/26607110/974155