mercredi 1 juillet 2020

Randomly generating invoice IDs - moving text database into script file?

I've come up with the following bash script to randomly generate invoice numbers, preventing duplications by logging all generated numbers to a text file "database".

To my surprise the script actually works, and it seems robust (although I'd be glad to have any flaws pointed out to me at this early stage rather than later on).

What I'm now wondering is whether it's at all possible to move the "database" of generated numbers into the script file itself. This would allow me to rely on and keep track of just the one file rather than two separate ones.

Is this at all possible, and if so, how? If it isn't a good idea, what valid reasons are there not to do so?

#!/usr/bin/env bash

generate_num() {
#num=$(head /dev/urandom | tr -dc '[:digit:]' | cut -c 1-5) [Original method, no longer used]
num=$(shuf -i 10000-99999 -n 1)
}

read -p "Are you sure you want to generate a new invoice ID? [Y/n] " -n 1 -r
echo
    if [[ $REPLY =~ ^[Yy]$ ]] 
    then
        generate_num && echo Generating a random invoice ID and checking it against the database...
        sleep 2

        while grep -xq "$num" "ID_database"
            do
                echo Invoice ID \#$num already exists in the database...
                sleep 2
                generate_num && echo Generating new random invoice ID and checking against database...
                sleep 2
            done

        while [[ ${#num} -gt 5 ]]
            do
                echo Invoice ID \#$num is more than 5 digits...
                sleep 2
                generate_num && echo Generating new random invoice ID and checking against database...
                sleep 2
          done

        echo Generated random invoice ID \#$num
        sleep 1
        echo Invoice ID \#$num does not exist in database...
        sleep 2
        echo $num >> "ID_database" && echo Successfully added Invoice ID \#$num to the database.

    else 
        echo "Exiting..."
    fi



Aucun commentaire:

Enregistrer un commentaire