问题描述
我正在尝试使用此脚本搜索多个域名的可用性,但它不起作用,错误在哪里?谢谢
#!/bin/bash
WEB=('madmane1' 'madmane2' 'madmane3' 'madmane4' 'madmane5' 'madmane6' 'madmane7' 'madmane8' 'madmane9')
ELEMENTS=${#WEB[@]}
for (( i=0;i<$ELEMENTS;i++)); do
whois ${WEB[${i}]}$'.com' | egrep -q \
'^No match|^NOT FOUND|^Not fo|AVAILABLE|^No Data Fou|has not been regi|No entri'
if [ $? -eq 0 ]; then
echo "${WEB[${i}]}$'.com' : available"
fi
done
错误如下:
line 9: ^No match|^NOT FOUND|^Not fo|AVAILABLE|^No Data Fou|has not been regi|No entri: command not found
解决方法
将内容分配给数组,然后通过将其分配给字符串而不用引号来破坏它似乎是这里的主要错误,尽管这不是您收到语法错误的原因。
您还想避免testing ”$?” to see if a command succeeded or not,an anti-pattern
另见Correct Bash and shell script variable capitalization
错误消息的原因似乎是反斜杠后面有一个空格,因此您要转义空格而不是换行符,因此 shell(在某种意义上是正确的)将下一行解析为新命令。>
#!/bin/bash
web=('madmane1' 'madmane2' 'madmane3' 'madmane4' 'madmane5' 'madmane6' 'madmane7' 'madmane8' 'madmane9')
for domain in "${web[@]}"; do
if whois "$domain.com" |
grep -Eq '^No match|^NOT FOUND|^Not fo|AVAILABLE|^No Data Fou|has not been regi|No entri'
then
echo "$domain.com: available"
fi
done
今后,在寻求人工帮助之前,可能先尝试 http://shellcheck.net/。
,我想我用 https://www.shellcheck.net/ 解决了这个问题 现在是这样:
#!/bin/bash
WEB=('madmane1' 'madmane2' 'madmane3' 'madmane4' 'madmane5' 'madmane6' 'madmane7' 'madmane8' 'madmane9')
ELEMENTS=${#WEB[@]}
for (( i=0;i<$ELEMENTS;i++)); do
whois "${WEB[${i}]}"$'.com' | grep -E \
'^No match|^NOT FOUND|^Not fo|AVAILABLE|^No Data Fou|has not been regi|No entri'
if [ $? -eq 0 ]; then
echo "${WEB[${i}]}$'.com' : available"
fi
done