根据模式检查 bash 脚本参数,并替换其中的一个字符

Check bash script argument against pattern, and replace a character in it

我需要编写一个 bash 脚本来检查提供给脚本的第一个参数是否匹配 glob 模式,在 JavaScript RegExp 中我会表示为

^[a-zA-Z0-9]+\.[a-zA-Z]{2,}$

换句话说:以一个或多个 alphabets/digits 开头,紧跟一个句点,然后是 2 个或多个字母,然后结束。其他一切都应该无法通过测试。

那我还需要把参数中的句号换成下划线

到目前为止我可以检查参数是否为空:

case  in
  '') echo "No argument supplied" >&2; exit 1 ;;
esac

我认为模式测试需要被否定并放在 '' 检查该 case 语句之后,但我不知道如何构造它。任何直接帮助或在线资源将不胜感激。

我还希望获得有关如何更改提供的有效参数以将其中的单个句点替换为下划线的任何帮助。

同样的正则表达式也适用于 BASH。考虑这个片段:

re='^[a-zA-Z0-9]+\.[a-zA-Z]{2,}$'
s='abc123.xy'

[[ $s =~ $re ]] && echo "${s/./_}"
abc123_xy