如何使用 bash 搜索多个域名可用性?

How to search for multiple domain names availability using bash?

我正在尝试使用此脚本搜索多个域名的可用性,但它不起作用,哪里出错了?谢谢

#!/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

我想我已经解决了 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 

将内容分配给一个数组,然后通过将它分配给一个不带引号的字符串来破坏它似乎是这里的主要错误,尽管这不是您遇到语法错误的原因。

你也想避免

另见 Correct Bash and shell script variable capitalization

错误消息的原因似乎是反斜杠后的 space,因此您要转义 space 而不是换行符,因此转义 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/,然后再寻求人工帮助。