> Write bash code to parse the following arguments:
>
> $ ./export.sh --out-file dump.json --db foo.sqlite --include-headers --exclude-rev -vvv -p9000
Here's an example bash code to parse the arguments:
#!/bin/bash
# Default values for optional arguments
INCLUDE_HEADERS=false
EXCLUDE_REV=false
VERBOSE_LEVEL=0
PORT=0
# Parse the arguments
while [[ "$#" -gt 0 ]]; do
case $1 in
--out-file) OUT_FILE="$2"; shift ;;
--db) DB="$2"; shift ;;
--include-headers) INCLUDE_HEADERS=true ;;
--exclude-rev) EXCLUDE_REV=true ;;
-v) VERBOSE_LEVEL=$((VERBOSE_LEVEL+1)) ;;
-p) PORT="$2"; shift ;;
-h|--help)
echo "Usage: ./export.sh [OPTIONS]"
echo ""
echo "Options:"
echo "--out-file Output file path (required)"
echo "--db Database path (required)"
echo "--include-headers Include column headers in output (default: false)"
echo "--exclude-rev Exclude revisions in output (default: false)"
echo "-v Increase verbosity level (default: 0)"
echo "-p Port number (default: 0)"
echo "-h, --help Show help"
exit 0
;;
*) echo "Unknown parameter passed: $1"; exit 1 ;;
esac
shift
done
# Check required arguments
if [[ -z $OUT_FILE ]]; then
echo "Error: missing argument --out-file"
exit 1
fi
if [[ -z $DB ]]; then
echo "Error: missing argument --db"
exit 1
fi
# Print parsed arguments
echo "OUT_FILE=$OUT_FILE"
echo "DB=$DB"
echo "INCLUDE_HEADERS=$INCLUDE_HEADERS"
echo "EXCLUDE_REV=$EXCLUDE_REV"
echo "VERBOSE_LEVEL=$VERBOSE_LEVEL"
echo "PORT=$PORT" # Start with the "act as a terminal" preface (https://github.com/f/awesome-chatgpt-prompts#act-as-a-linux-terminal)
git clone https://github.com/shesek/veterinarian-app
cd veterinarian-app
node src/webserver.js --port 5051
curl -X POST localhost:5051/api/customers/create -d name='Bob Marlin' -d phone=050-1112223 -d [email protected]
curl localhost:5051/api/customers?fields=id,uri,name,phone,email,created_at,updated_at,num_animals,next_visit
# src/webserver.js will now exists with an implementation of the API endpoints.
./util/db-dump-json.sh --include customers,animals --out-file dump.json
# db-dump-json.sh will now exists, including argument parsing/validation and usage help text.
The twitter thread lists some more examples. It's pretty mind blowing to me that this is possible!
[email protected]
GPG: FCF1 9B67 8665 62F0 8A43 AAD6 81F6 104C D0F1 50FC
https://github.com/shesek
https://twitter.com/shesek
https://www.bitrated.com/nadav
https://keybase.io/nadav
[ my public key: https://keybase.io/nadav; my proof: https://keybase.io/nadav/sigs/fidZAcOG85AA92vZM5f8WYFciFMvBPhZdMQ71gX3hBw ]