检查变量是否包含一组TLD中的域名

时间:2013-11-29 11:07:36

标签: bash shell

我有一个包含DNS记录名称的变量名称。我想检查某些条件,例如,如果它以.com.es结尾。

现在我正在使用

name="test.com"

namecheck=`echo $name | grep -w  "^[A-Za-z]*..com"`

但它只检查com并忽略.也可以根据存储在数组中的一系列值进行检查,如

domain=[ ".es" ".com" ".de"]

3 个答案:

答案 0 :(得分:6)

bash实施:

name=test.com
domains=(es com de)
for dom in ${domains[@]}; do
    [[ $name == *.$dom ]] && echo $name && break
done

答案 1 :(得分:3)

您可以使用此egrep

egrep -q "\.(com|es|de)$"

如果给定的输入以.com OR .es.de

结尾,则返回0(true)

编辑:将其与一系列允许的域一起使用:

domain=( "es" "com" "de" )
str=$(printf "|%s" ${domain[@]})
str="${str:1}"

echo "abc.test.com"|egrep "\.(${str})$"
abc.test.com

echo "abc.test.org"|egrep "\.(${str})$"

答案 2 :(得分:2)

POSIX shell兼容且超快:

case "$name" in *.de|*.com|*.es) echo "$name" or whatever ;; esac