JEG2: as for the shell book, I think there are 3 common “concepts” where a better understanding would help the user.
These are 1) command line arguments (understanding what the shell parser does and what the program (shell command) sees), common problems here is how to give a newline, give a string containing both a " and ', etc.
2) file descriptors (pipes), the stdin/out are generally understood, but that these are just fd 0 and 1 are rarely fully understood, this in relation to redirection, e.g. how you can send data to an arbitrary file descriptor via a here-doc, here-string, from running another command etc. (not just via |) — useful e.g. when you want to do things like use a here-doc for a program that also needs to read from stdin, when you want to avoid temporary files (e.g. a command only takes a file as argument) etc.
and 3) is variables; there would probably be a few more things, but that’s the main concepts I think the user will benefit from understanding better
Of course there is also things like glob patterns, loops, conditions, etc. — but that’s really just giving a readers digest of “man bash” ;)