Back up or restore home directory
This is very nice for a beginner!



Instead of matching against files in the filesystem as a glob like this:


if [[ ! $BACKUP_DEV_NODE =~ /dev/* ]]; then



It would be better to use the -e flag to check if the path exists or not:

if [[ ! -e $BACKUP_DEV_NODE ]]; then




It's better to avoid any of the flags of echo,
because they don't work consistently in all systems.

In these examples you don't need any flags:


echo -e "Input 1 to backup, 2 to restore, anything else to quit"
echo -e ""



You could simplify these as:

echo "Input 1 to backup, 2 to restore, anything else to quit"
echo


If you find yourself needing any of echo's flags,
look into printf instead.



In here:


select hn in $MOUNT_POINT/*_backup;
do
    echo "Picked hostname folder: $HOSTNAME_VAR"
    echo "Select appropriate username folder"
    select un in $HOSTNAME_VAR/home/*;
        do
            echo "Picked username folder: $USERNAME_VAR"
            FULL_PATH=$USERNAME_VAR
            break
        done
    break
done



You're not using hn.
Another thing, the do...done of the inner select is over-indented, which is not  consistent with the rest of the code.



The default exit code is that of the last operation.
So unless you want to forcefully exit with 0 after a failed operation,
you shouldn't need exit 0, you can write simply exit.



Instead of this:


echo $(date) &gt;&gt; $FULL_PATH/homefolder_backup.log



You could simply redirect the output of date itself:

date &gt;&gt; $FULL_PATH/homefolder_backup.log




The double-quotes here are unnecessary:


echo "Syncing"
echo "Done"