- `./sab-find-db` assumes that `sab-find-db` exists in your working directory. Why should it?
 - In the usage-output you should display the program name without path , so `die "usage: $(basename $0) ...`.
 - Maybe it is more useful if you use different error codes and not only '1'.
 - A short comment at the beginning of the file about its purpose is useful.
 - `sab-remove` does not contain a usage message.
 - Most users assume that the option '-?' produces a usage message.
 - It is a good idea to use a named variable in the code and not a positional parameter. At the top of the function you assign the positional parameters to the named variables. If you change your parameter order or insert/delete  new positional parameters you only have to change the first lines of your code.
 - `mv`as in `mv "$file" target` in `sab-remove` is not a good idea. "$file" replaces target, but not only the content is replaced but also the ownership and the permissions. Do  `cp "$file" target` instaed of `mv`.
 - I do not understand the second if-then-else statement in add-remove. Does this mean you do not want to remove the last ntry in the file?
 - `sab-find-db` is a name that irritates me. I would prefer something like `sab-dbpath`.