如何检查带URL的$#参数是以http / https开头还是以jpg / jpeg结尾?

时间:2016-11-17 17:59:26

标签: bash shell sh

如何检查给定字符串是以http / https开头,还是以jpg / jpeg结尾?

换句话说,我想验证以下内容:

  1. 字符串以:httphttps
  2. 开头
  3. 字符串以:jpg jpeg JPG`JPEG
  4. 结尾

    我的尝试:

    if [[ $1 = http?(s)://*.jpg ]]; then
        echo "invalid URL"
    fi
    

2 个答案:

答案 0 :(得分:3)

您可以使用此BASH正则表达式:

[[ ${1,,} =~ ^https?://.+\.jpe?g$ ]]
  • ${1,,}是将$1转换为全部小写
  • 正则表达式检查$1是否在开始时有http://https://,并以jpgjpeg
  • 结束

答案 1 :(得分:0)

你走在正确的轨道上。您可以设置nocasematch选项以使其不区分大小写,并且您只需要在协议中检查可选e的方式添加可选的s到扩展名。

shopt -s nocasematch
shopt -s extglob   # may not be necessary
if [[ $1 = http?(s)://*.jp?(e)g ]];
then
     echo "invalid URL"
fi

较旧版本的bash可能要求您使用shopt -s extglob启用扩展模式匹配,以使用?(...)内的[[模式;较新的版本会自动将[[ ... ]]内的模式视为扩展模式。