#!/bin/bash
# from https://diasp.org/posts/90963a606d210138a02e047d7b62795e 2020-04-30 by zebulon 1er, dit "le maudit"
#
# usage examples:
# $ convert-url.sh
# usage: convert-url.sh [options...] URL
#
# options:
# -d, --decode decode URL from percents.
# -e, --encode encode URL to percents.
# -h, --help print this help and exit.
#
# arguments:
# URL string to convert.
#
# $ convert-url.sh -e 'https://debian.org'
# https%3A%2F%2Fdebian.org
# $ convert-url.sh -d 'https%3A%2F%2Fdebian.org'
# https://debian.org
PROGNAME="$(basename "$0")"
PrintUsage() {
echo >&2 'usage: '"$PROGNAME"' [options...] URL'
echo >&2
echo >&2 'options:'
echo >&2 ' -d, --decode decode URL from percents.'
echo >&2 ' -e, --encode encode URL to percents.'
echo >&2 ' -h, --help print this help and exit.'
echo >&2
echo >&2 'arguments:'
echo >&2 ' URL string to convert.'
echo >&2
}
URLencode() {
# Usage: URLencode "string"
local I LC_ALL=C
for (( I = 0; I < ${#1}; I++ )); do
: "${1:I:1}"
case "$_" in
[a-zA-Z0-9.~_-])
printf '%s' "$_"
;;
*)
printf '%%%02X' "'$_"
;;
esac
done
printf '\n'
}
URLdecode() {
# Usage: URLdecode "string"
: "${1//+/ }"
printf '%b\n' "${_//%/\\x}"
}
case "$1" in
'-d' | '--decode')
if [ -z "$2" ]; then
echo >&2 'error : argument URL missing.'
exit 1
else
URLdecode "$2"
fi
;;
'-e' | '--encode')
if [ -z "$2" ]; then
echo >&2 'error : argument URL missing.'
exit 1
else
URLencode "$2"
fi
;;
'-h' | '--help')
PrintUsage
;;
*)
PrintUsage
exit 1
;;
esac
Comments