如何从bash shell脚本中的URL获取域名

时间:2020-01-09 10:38:44  来源:igfitidea点击:

如何在Linux或类似Unix的操作系统下使用bash shell脚本从URL字符串(例如https://www.theitroad.local/index.php)中提取或获取域名?
您可以使用标准的Unix命令(例如sed,awk,grep,Perl,Python等)从URL获取域名。
无需编写正则表达式。

让我们使用各种命令和选项从Linux或类Unix系统的给定变量中获取域部分。

从完整的网址获取域名

假设您的网址名称存储在bash shell变量中,例如$x:

x='https://www.theitroad.local/faq/copy-command/'

您可以按以下方式使用awk:

echo "$x" | awk -F/ '{print }'
### OR ###
awk -F/ '{print }'

输出示例:

www.theitroad.local

使用sed从URL提取域名

这是一个示例sed命令:

url="https://www.theitroad.local/faq/copy-command"
echo "$url" | sed -e 's|^[^/]*//||' -e 's|/.*$||'

使用bash shell参数替换从URL中提取域名

另一个选择是使用bash shell参数替换:

# My shell variable 
f="https://www.theitroad.local/faq/copy-command/"
 
## Remove protocol part of url  ##
f="${f#http://}"
f="${f#https://}"
f="${f#ftp://}"
f="${f#scp://}"
f="${f#scp://}"
f="${f#sftp://}"
 
## Remove username and/or username:password part of URL  ##
f="${f#*:*@}"
f="${f#*@}"
 
## Remove rest of urls ##
f=${f%%/*}
 
## Show domain name only ##
echo "$f"

Shell脚本示例

通过匹配域名部分从Cloudflare清除URL的Shell脚本:

#!/bin/bash
zone_id=""
api_key=""
 
urls="$@"
bon=$(tput bold)
boff=$(tput sgr0)
c=1
[ "$urls" == "" ] && { echo "Usage: ##代码## url"; exit 1; }
 
clear
echo "Purging..."
echo
for u in $urls
do
     echo -n "${bon}${c}${boff}.${u}: "
     ## Get domain name ##
     d="$(echo $u | awk -F/ '{ print }')"
     ## Set API_KEY, Email_ID, and ZONE_ID as per domain ##
     case $d in
	     www.theitroad.local) zone_id="ID_1"; api_key="MY_KEY_1"; email_id="[email protected]";;
	     theitroad.com) zone_id="ID_2"; api_key="MY_KEY_2"; email_id="[email protected]";;
	     *) echo "Domain not configured."; continue;;
     esac
     ## Do it ##
     curl -X DELETE "https://api.cloudflare.com/client/v4/zones/${zone_id}/purge_cache" \
     -H "X-Auth-Email: ${email_id}" \
     -H "X-Auth-Key: ${api_key}" \
     -H "Content-Type: application/json" \
     --data "{\"files\":[\"${u}\"]}"
     echo
     (( c++ ))
done
echo