Bash警告 - 预期的争论

use*_*959 3 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"
else
    echo "${OUTPUT}"
    arpspoof -i wlan1 -t ${OUTPUT} /GATEWAY/
fi
Run Code Online (Sandbox Code Playgroud)

虽然它工作正常并且如我所料,但是当我执行它时会收到警告,我想知道如何修复它.输入MAC地址后得到的输出:

find.sh: 7: [: =: argument expected
/IP_ADDRESS/
**:**:**:**:*:* **:**:**:**:**:** 0806 42: arp reply 192.168.1.1 is-at **:**:**:**:*:*
Run Code Online (Sandbox Code Playgroud)

tha*_*guy 8

有多个错误.shellcheck找到最明显的:

首先,你在这里错过了一个空间:

if [ ${OUTPUT} = "" ]
                   ^--- Required
Run Code Online (Sandbox Code Playgroud)

其次,你缺少所需的引用:

if [ "${OUTPUT}" = "" ]
     ^-- Here -^
Run Code Online (Sandbox Code Playgroud)

这应该足以摆脱你所看到的错误.

以下是其他问题:

  1. 你的正则表达式试图匹配一个ipv4地址,而是匹配8个字符串,其他每个字符都是一个数字.

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

  3. 你运行脚本sh yourscript.这仅适用于sh脚本.要运行bash脚本,请使用bash yourscript.