A única maneira real de explicar todos esses termos é com uma aula de história.
Então começamos logo no início, com o UNIX nos anos 70. Muito antes das interfaces gráficas, a linha de comando é sua única interface para o sistema operacional. E dado que o centro de um sistema operacional é chamado de 'kernel', alguns acreditam que a camada externa deve ser ' shell '. Trocadilhos terríveis continuam sendo um tema no UNIX.
Ainda hoje, o Terminal.app é essencialmente apenas emular os terminais físicos usados para acessar os shells há 40 anos. Nós 'abrimos um terminal' em vez de puxar uma cadeira, mas essa é realmente a mudança mais fundamental.
Como o UNIX foi escrito por programadores, inicialmente para eles mesmos, eles tornaram esse shell programável. Nós chamamos esses scripts - assim como um ator pode seguir um script, então um shell pode seguir um ' shell script '. Geralmente (espero) programas não totalmente desenvolvidos, mas um nível muito útil de automação.
A maioria das partes do UNIX pode ser (e ter sido) substituída, incluindo o shell. Então, quando Stephen Bourne escreveu um substituto para o shell de Ken Thompson, ele se tornou o Bourne Shell - e Ken, o Thompson Shell . E com o tempo, o C Shell (concha do mar? Muito franzino), o Korn Shell , e assim por diante.
Neste ponto, ' UNIX shell ' se torna um termo genérico para qualquer shell UNIX. Embora existam diferenças sintáticas entre eles, praticamente qualquer comando UNIX pode ser escrito em qualquer shell UNIX. Portanto, esse termo é usado quando a diferença simplesmente não importa. É específico o suficiente para evitar confusão com ambientes não-UNIX (alguém se lembra DOS Shell ?), Mas genérico o suficiente para que não o façamos. t cuidado sh vs csh vs tsch vs ksh ...
Quando o GNU veio para substituir o Bourne Shell, eles chamaram a substituição de Bourne-Again Shell - 'bater'. Último trocadilho, prometo. Embora seja apenas mais um shell UNIX, é atualmente o mais difundido - e tem sido o mais difundido em todos os anos de boom e Internet do Linux e da Internet. Então você ouvirá 'comando', 'comando UNIX', 'comando terminal' e 'comando bash' usado alternadamente, 'shell UNIX' e 'bash shell' usados alternadamente, etc. Entretanto, devido às diferenças sintáticas entre os vários shells, quando eles dizem 'bash script' eles geralmente significam bash - e da mesma forma, 'shell script' geralmente também significa 'bash script', a menos que indicado de outra forma.