Linux Bash警告-应为参数
下面的bash脚本将MAC地址作为变量,并查找与此MAC地址对应的IP地址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"
#!/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 -^
这应该足以消除您看到的错误
以下是其他问题:
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
,如果它在当前目录中)。