Shell脚本:给出错误无效的命令名" server1"

时间:2014-11-04 06:30:10

标签: shell unix expect

我已经为双重身份验证编写了一个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" ] 等但仍然无法正常工作。有什么建议/解决方案吗?

2 个答案:

答案 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