Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash警告-应为参数_Linux_Bash_If Statement - Fatal编程技术网

Linux Bash警告-应为参数

Linux Bash警告-应为参数,linux,bash,if-statement,Linux,Bash,If Statement,下面的bash脚本将MAC地址作为变量,并查找与此MAC地址对应的IP地址 #!/bin/bash read address OUTPUT="$(nmap -sn -n /IP_ADDRESS_RANGE/ | grep -B 2 "$address" | grep -e ^.*[0-9].[0-9].[0-9].[0-9] | awk '{print substr($0,22)}')" if [ ${OUTPUT} = ""]; then echo "not found"

下面的bash脚本将MAC地址作为变量,并查找与此MAC地址对应的IP地址

#!/bin/bash

read address

OUTPUT="$(nmap -sn -n /IP_ADDRESS_RANGE/ | grep -B 2 "$address" | 
grep -e ^.*[0-9].[0-9].[0-9].[0-9] |  awk '{print substr($0,22)}')"


if [ ${OUTPUT} = ""]; then
    echo "not found"
else
    echo "${OUTPUT}"
    arpspoof -i wlan1 -t ${OUTPUT} /GATEWAY/
fi
虽然它工作正常,正如预期的那样,但当我执行它时会收到警告,我想知道如何修复它。输入MAC地址后得到的输出:

find.sh: 7: [: =: argument expected
/IP_ADDRESS/
**:**:**:**:*:* **:**:**:**:**:** 0806 42: arp reply 192.168.1.1 is-at **:**:**:**:*:*

有多个错误。找到最明显的问题:

首先,此处缺少一个空格:

if [ ${OUTPUT} = "" ]
                   ^--- Required
其次,您缺少必需的报价:

if [ "${OUTPUT}" = "" ]
     ^-- Here -^
这应该足以消除您看到的错误

以下是其他问题:

  • 您的正则表达式尝试匹配ipv4地址,但会匹配8个字符的字符串,其中每个字符都是数字

  • 正则表达式是不带引号的,因此它也可能意外地匹配目录中的文件并中断
    grep

  • 您可以使用
    sh yourscript
    运行脚本。这仅适用于
    sh
    脚本。要运行
    bash
    脚本,请使用
    bash-yourscript

  • 为什么不使用:

    [ -z "${OUTPUT}" ]
    
    相反?人们还使用了这样一种丑陋的伎俩:

    [ "z${OUTPUT}" = "z" ]
    

    要捕获空字符串

    如果使用
    if[“${OUTPUT}=”]
    ?@ExplosionPills,我会收到相同的警告。如果[[“${OUTPUT}”==”]?@ExplosionPills-find.sh:7:find.sh如何[[:找不到您使用的是哪个版本的
    bash
    ?我认为运行bash脚本的最佳方法是使其可执行,然后使用
    /path/to/script
    (或者
    /script
    ,如果它在当前目录中)。