Skip to content

Instantly share code, notes, and snippets.

@smguggen
Last active May 15, 2025 14:59
Show Gist options
  • Save smguggen/125ceef54902c34e07e6fd56e5356c87 to your computer and use it in GitHub Desktop.
Save smguggen/125ceef54902c34e07e6fd56e5356c87 to your computer and use it in GitHub Desktop.
Parse Command Line Arguments
#!/usr/bin/env bash
stripslashes() {
echo $1 | sed 's/-*//'
}
parseobj() {
RESULT=""
COUNT=1
LENGTH=$(echo $1 | grep -o ";" | wc -l)
LENGTH=$(( $LENGTH + 1 ))
while [[ $COUNT -le $LENGTH ]]; do
PAIR=$(echo $1 | cut -d ";" -f $COUNT)
KEY=$(echo $PAIR | cut -d ":" -f 1)
if [[ $KEY == $2 ]]; then
RESULT=$(echo $PAIR | cut -d ":" -f 2)
break;
fi
COUNT=$(( $COUNT + 1 ))
done
echo $RESULT
}
getflags() {
FL_COMMAND=""
FL_FLAGS=""
FL_PARAMS=""
while [ $# -gt 0 ]; do
case "$1" in
-*) STRIPPED=$(stripslashes "$1")
if [[ -n $FL_FLAG ]]; then
FL_FLAGS="$FL_FLAGS;$FL_FLAG:true"
fi
FL_FLAG=$STRIPPED
shift;
;;
*)
if [[ -n $FL_FLAG ]]; then
if [[ -z $FL_FLAGS ]]; then
FL_FLAGS="$FL_FLAG:$1"
else
FL_FLAGS="$FL_FLAGS;$FL_FLAG:$1"
fi
FL_FLAG=""
else
FL_PARAMS="$FL_PARAMS $1"
fi
shift;
;;
esac
done
if [[ -n $FL_FLAG ]]; then
FL_FLAGS="$FL_FLAGS;$FL_FLAG=true"
FL_FLAG=""
fi
export FL_PARAMS=$FL_PARAMS
eval set -- "$FL_PARAMS"
export FL_FLAGS="$FL_FLAGS"
}
if [[ $1 == "set" || $1 == "reset" ]]; then
shift;
getflags $@
export FL_PARAMS=$FL_PARAMS
eval set -- "$FL_PARAMS"
export FL_FLAGS="$FL_FLAGS"
elif [[ -z $FL_PARAMS ]]; then
getflags $@
export FL_PARAMS=$FL_PARAMS
eval set -- "$FL_PARAMS"
export FL_FLAGS="$FL_FLAGS"
fi
if [[ $1 == "get" ]]; then
shift;
FLAG_KEY=$1
shift;
echo $(parseobj $FL_FLAGS $FLAG_KEY)
elif [[ $1 == "test"]]; then
shift;
if [[ -z $1 ]]; then
if [[ -n $FL_FLAGS ]]; then
echo "FLAGS: $FL_FLAGS"
else
echo "FLAGS: none"
fi
if [[ -n $FL_PARAMS ]]; then
echo "PARAMS: $FL_PARAMS"
else
echo "PARAMS: none"
fi
else
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment