下面的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 **:**:**:**:*:*
答案 0 :(得分:6)
有多个错误。 shellcheck发现最明显的一些:
首先,你在这里错过了一个空格:
if [ ${OUTPUT} = "" ]
^--- Required
其次,您错过了所需的引用:
if [ "${OUTPUT}" = "" ]
^-- Here -^
这足以摆脱你所看到的错误。
以下是其他问题:
你的正则表达式试图匹配一个ipv4地址,但是匹配8个字符串,其中每个其他字符都是一个数字。
正则表达式没有引用,因此它也可能意外地匹配目录中的文件并中断grep
您使用sh yourscript
运行脚本。这仅适用于sh
脚本。要运行bash
脚本,请使用bash yourscript
。
答案 1 :(得分:1)
为什么不使用:
[ -z "${OUTPUT}" ]
代替?人们也使用这样一个丑陋的伎俩:
[ "z${OUTPUT}" = "z" ]
捕捉空字符串