The only real way to explain all these terms is with a history lesson.
So we start right at the start, with UNIX in the 70s. Way back before graphical interfaces, the command-line is your only interface to the OS. And given that the center of an OS is called the 'kernel', some nut decided the outer layer should be 'shell'. Terrible puns remain a theme in UNIX.
Still today, Terminal.app is essentially just emulating the physical terminals used to access shells 40 years ago. We 'open a terminal' instead of pulling up a chair, but that's really the most fundamental change.
Because UNIX was written by programmers, initially for themselves, they made this shell programmable. We call these scripts - just as an actor can follow a script, so a shell can follow a 'shell script'. Usually (hopefully) not fully-fledged programs, but a very useful level of automation.
Most parts of UNIX can be (and have been) replaced, including the shell. So when Stephen Bourne wrote a replacement for Ken Thompson's shell, it became the Bourne Shell - and Ken's, the Thompson Shell. And in time, the C Shell (sea shell? very punny), the Korn Shell, and on and on.
At this point, 'UNIX shell' becomes a generic term for any UNIX shell. While there's syntactic differences between them, pretty much any UNIX command can be written at any UNIX shell. So this term is used when the difference simply didn't matter. It's specific enough to avoid confusion with non-UNIX environments (anyone remember DOS Shell?), but generic enough that we don't care sh vs csh vs tsch vs ksh ...
When GNU came to replace the Bourne Shell, they named the replacement the Bourne-Again Shell - 'bash'. Last pun, I promise. While it's really just another UNIX shell, it's currently the most wide-spread - and has been the most widespread throughout the Linux and Internet 'boom years'. So you'll hear 'command', 'UNIX command', 'terminal command' and 'bash command' used interchangeably, 'UNIX shell' and 'bash shell' used interchangeably, etc. However, due to the syntactic differences between the various shells, when they say 'bash script' they usually do mean bash - and likewise, 'shell script' usually also means 'bash script', unless stated otherwise.