echo命令出错

时间:2013-08-15 19:15:12

标签: bash echo wget nessus

我开始学习如何编写bash脚本,我遇到了echo命令和变量的问题。

#!/bin/bash
LOGINOUTPUT = "`wget --no-check-certificate --post-data 'login=redacted&password=redacted' https://nessusserver:8834/login -O -`"
echo $LOGINOUTPUT

运行此脚本将返回以下内容:

--2013-08-15 15:07:32--  https://nessusserver:8834/login
Resolving nessussserver (nessusserver)... 172.23.80.88
Connecting to nessusserver (nessusserver)|172.23.80.88|:8834... connected.
WARNING: cannot verify nessusserver's certificate, issued by ‘/C=FR/ST=none/L=Paris/O=Nessus Users United/OU=Certification Authority for nessusserver.healthds.com/CN=nessusserver.healthds.com/emailAddress=ca@besecmisc1.healthds.com’:
  Unable to locally verify the issuer's authority.
    WARNING: certificate common name ‘nessusserver.healthds.com’ doesn't match requested host name ‘nessusserver’.
HTTP request sent, awaiting response... 200 OK
Length: 461 [text/xml]
Saving to: ‘STDOUT’

100%[=============================================================================================================================================================>] 461         --.-K/s   in 0s      

2013-08-15 15:07:33 (90.4 MB/s) - written to stdout [461/461]

./nessus-output.sh: line 2: LOGINOUTPUT: command not found

为什么认为LOGINOUTPUT是一个命令?在此先感谢您的帮助!

编辑:更新了脚本

#!/bin/bash
LOGINOUTPUT=$(wget --no-check-certificate --post-data 'login=redacted&password=redacted' https://nessusserver:8834/login -O -)
echo $LOGINOUTPUT

仍然会产生相同的错误,如果我将$(...)作为反引号,也是如此。

1 个答案:

答案 0 :(得分:3)

这是因为在变量赋值中=之前和之后都有空格。正确的任务是:

LOGINOUTPUT="....

没有空格。

如果添加空格,则shell会将LOGINOUTPUT解释为命令,并尝试将两个参数传递给它:“=”和带引号的字符串。这当然失败了,错误为LOGINOUTPUT: command not found

作为旁注,在进行流程替换时,最好使用此语法$(command)而不是反引号。