如何使用正则表达式 Bash 脚本验证域名?

如何使用正则表达式 Bash 脚本验证域名?

我尝试验证任何域名,但似乎无法匹配。不明白为什么语法看起来不错,我也验证了这个正则表达式https://rubular.com/r/QmX59URV8D 它运行良好。

这是我的代码

#!/bin/bash

read -p "Enter a domain name: " domain

# Validate domain name
validate="(?=^.{5,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)"

# If user doesn't enter anything
if [ -e $domain ]; then
    echo "You must enter a domain"
fi

if [[ $domain =~ $validate ]]; then
    echo "Valide $domain name."
else
    echo "Not valid $domain name."
fi

答案1

首先,您需要使用与 Bash 兼容的正则表达式,而不是 Ruby 正则表达式,正如评论中所提到的。

接下来使用=~比较运算符,您需要使用双括号[[]]不是单括号。

并且正如评论中提到的那样,用于-z检查读入的变量是否为空。

就像是:

#!/bin/bash

read -p "Enter a domain name: " domain

# Validate domain name
validate="^([a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]\.)+[a-zA-Z]{2,}$"

# If user doesn't enter anything
if [[ -z "$domain" ]]; then
    echo "You must enter a domain"
fi

if [[ "$domain" =~ $validate ]]; then
    echo "Valid $domain name."
else
    echo "Not valid $domain name."
fi

应该可以帮你开始了。

相关内容