Bash: Test if a string is a web link
I sometimes need this in my scripts: if a string starts with either http://
or https://
, it must be a web link. How can I test for that in a single query?
Like this:
sh$ restore="$(shopt -p extglob)" $ regex="http?(s)://" $ shopt -s extglob $ x="http://wiki.archlinux.org/index.php" $ [[ "$x" == $regex* ]] && echo yes || echo no yes $ x="https://wiki.archlinux.org/index.php" $ [[ "$x" == $regex* ]] && echo yes || echo no yes $ x="http://wiki.archlinux.org/index.php" $ [[ "$x" == $regex* ]] && echo yes || echo no yes $ x="httpx://wiki.archlinux.org/index.php" $ [[ "$x" == $regex* ]] && echo yes || echo no no $ $restore
This can even be expanded to contain the often gratuitous www.
:
shregex="http?(s)://?(www.)"
Real life example: a script that plays a given link with mpd/mpc if it's a soundcloud URL, and otherwise uses mpv:
sh#!/bin/bash shopt -s extglob if [[ "$1" == ${regex}soundcloud.com/* ]]; then mpc clear mpc load "soundcloud://url/$1" mpc play mpc save "$(mpc -f '%name%'|head -1)" else exec mpv "$1" fi