- Enforce bash coding conventions across all scripts as outlined in new AGENTS.md - Convert local variables to lowercase and use proper quoting - Update conditionals to use `[[ ... ]]` and remove `function` keyword - Add support for setting git author name and email via env vars - Improve SSH key handling and git operations - Update documentation and changelog to reflect changes
111 lines
2.4 KiB
Bash
Executable File
111 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
# Get script name
|
|
script=$(basename "$0")
|
|
version="1.0.0"
|
|
|
|
# Display Help
|
|
help() {
|
|
echo
|
|
echo "$script"
|
|
echo
|
|
echo "Description: Parse and output segements."
|
|
echo "Syntax: $script <url> [url|proto|user|pass|hostname|subdomain|port|path]"
|
|
echo "Example: $script https://www.example.com subdomain,hostname"
|
|
echo " $script git@github.com:OCA/server-tools.git user,hostname,path"
|
|
echo
|
|
}
|
|
|
|
# Show help and exit
|
|
if [[ "$1" == "help" ]]; then
|
|
help
|
|
exit
|
|
fi
|
|
|
|
# Check params
|
|
if [[ -z "$2" ]]; then
|
|
echo "Parameter filter is empty."
|
|
exit 1
|
|
fi
|
|
|
|
# Initialize variables
|
|
proto=""
|
|
user=""
|
|
pass=""
|
|
hostname=""
|
|
port=""
|
|
path=""
|
|
subdomain=""
|
|
|
|
# Check if the URL is in SSH format (e.g., git@github.com:OCA/server-tools.git)
|
|
if [[ "$1" == *:* && "$1" != *://* ]]; then
|
|
proto="ssh://"
|
|
user="$(echo "$1" | cut -d@ -f1)"
|
|
hostname="$(echo "$1" | cut -d@ -f2 | cut -d: -f1)"
|
|
path="$(echo "$1" | cut -d: -f2)"
|
|
else
|
|
# Extract protocol
|
|
proto="$(echo "$1" | grep :// | sed -e's,^\(.*://\).*,\1,g')"
|
|
|
|
# Remove the protocol
|
|
url="$(echo "${1/$proto/}")"
|
|
|
|
# Extract the user (if any)
|
|
userpass="$(echo "$url" | grep @ | cut -d@ -f1)"
|
|
pass="$(echo "$userpass" | grep : | cut -d: -f2)"
|
|
if [[ -n "$pass" ]]; then
|
|
user="$(echo "$userpass" | grep : | cut -d: -f1)"
|
|
else
|
|
user=$userpass
|
|
fi
|
|
|
|
# Extract the hostname
|
|
hostname="$(echo "${url/$user@/}" | cut -d/ -f1)"
|
|
|
|
# Try to extract the port
|
|
port="$(echo "$hostname" | sed -e 's,^.*:,:,g' -e 's,.*:\([0-9]*\).*,\1,g' -e 's,[^0-9],,g')"
|
|
|
|
# Extract the path
|
|
path="$(echo "$url" | grep / | cut -d/ -f2-)"
|
|
|
|
# Extract subdomain (if any)
|
|
if [[ "$hostname" == *.* ]]; then
|
|
levels=$(echo "$hostname" | grep -o "\." | wc -l)
|
|
if (( levels == 2 )); then
|
|
subdomain=$(echo "$hostname" | awk -F"." '{print $1}')
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Process the requested filters
|
|
for f in $(echo "$2" | sed "s/,/ /g")
|
|
do
|
|
case $f in
|
|
url)
|
|
echo "$1"
|
|
;;
|
|
proto)
|
|
echo "$proto"
|
|
;;
|
|
user)
|
|
echo "$user"
|
|
;;
|
|
pass)
|
|
echo "$pass"
|
|
;;
|
|
hostname)
|
|
echo "$hostname"
|
|
;;
|
|
subdomain)
|
|
echo "$subdomain"
|
|
;;
|
|
port)
|
|
echo "$port"
|
|
;;
|
|
path)
|
|
echo "$path"
|
|
;;
|
|
esac
|
|
done
|