O primeiro UNIX estava na AT & T. O primeiro shell foi o shell Bourne. Foi muito legal, mas tinha algumas limitações sérias.
Quando os caras da Berkeley começaram a jogar com o UNIX e tentaram melhorar, eles saíram com a shell C . Ele tinha uma linguagem de programação diferente (embora também defeituosa em seu próprio caminho), mas era muito melhor no uso interativo. Devido às suas vantagens no uso interativo, tornou-se muito popular em qualquer UNIX que descende do Berkeley UNIX.
C shell (ou csh) gerou um clone de código aberto chamado tcsh. Se você usa csh, você provavelmente não usa csh 'true' ou original, mas tcsh.
Enquanto isso, os caras do UNIX não apenas sentavam em suas mãos. Dave Korn (cara legal) criou um novo shell chamado ... shell Korn. Ele seguiu o modelo de programação que o shell Bourne criou (provavelmente superior ao modelo csh). Tornou-se muito popular, tornou-se o dia a dia de muitas pessoas. Tornou-se parte da especificação UNIX também. Isso gerou um clone de código aberto bastante popular chamado pdksh, que é bastante próximo (não é 100%) compatível. Eventualmente, a AT & T divulgou o código como código aberto.
Os caras do GNU queriam criar seu próprio sistema UNIX, então eles precisavam de um shell, que eles pudessem incluir sem se preocupar com problemas de licenciamento. Eles criaram bash, o Bourne Again SHell. Principalmente compatível com o Bourne original, e tirando ideias do Csh e do Ksh, tornou-se popular tanto por causa da facilidade de uso, quanto porque vinha com todos os Linux. Houve várias versões, a versão 2 é a primeira muito útil, e agora está na versão 4 com novos recursos.
Depois veio o zsh. Ele também seguiu a sintaxe do shell Bourne e copiou o que era bom no Bourne shell, ksh, csh e bash. Ele tem, sem dúvida, a sintaxe mais avançada com recursos não encontrados em outros shells.
TL; DR Então, o que usar? Se você está codificando um script de inicialização, você quer usar / bin / sh, que é compatível com POSIX / Original Bourne. O idioma é esparso, mas será executado, mesmo se discos como / usr não estiverem disponíveis.
Se não forem scripts de inicialização, você terá mais opções. Se você está apenas em sua máquina, use qualquer coisa que esteja atualmente disponível. Você controla sua máquina. Se você está escrevendo para dar para outras pessoas, eu usaria / bin / sh ou bash. / bin / sh embora simples, está sempre disponível. O bash é open source, então quase sempre disponível, tem idade suficiente para estar em todos os lugares, mas novo o suficiente para ter alguns novos recursos. Csh não está disponível em todos os lugares e nem é zsh.