Fluxo de mainframe típico ...
Input Disk/Tape/User (runtime) --> Job Control Language (JCL) --> Output Disk/Tape/Screen/Printer
| ^
v |
`--> COBOL Program --------'
Fluxo típico do Linux ...
Input Disk/SSD/User (runtime) --> sh/bash/ksh/zsh/... ----------> Output Disk/SSD/Screen/Printer
| ^
v |
`--> Python script --------'
| ^
v |
`--> awk script -----------'
| ^
v |
`--> sed script -----------'
| ^
v |
`--> C/C++ program --------'
| ^
v |
`--- Java program ---------'
| ^
v |
: :
Shells são a cola do Linux
Os shells do Linux, como sh / ksh / bash / ... fornecem recursos de designação de entrada / saída / controle de fluxo muito parecidos com o antigo mainframe Job Control Language ... mas com esteróides! Eles são linguagens Turing completas em seu próprio direito, enquanto são otimizados para passar dados e controle de forma eficiente de e para outros processos de execução escritos em qualquer linguagem que o O / S suporte.
A maioria dos aplicativos Linux, independentemente do idioma em que a maior parte do programa é escrito, depende de scripts de shell e o Bash se tornou o mais comum. Clicar em um ícone na área de trabalho geralmente executa um pequeno script Bash . Esse script, direta ou indiretamente, sabe onde estão todos os arquivos necessários e define variáveis e parâmetros de linha de comando, finalmente chamando o programa. Esse é o uso mais simples de um shell.
O Linux como o conhecemos, entretanto, dificilmente seria Linux sem os milhares de scripts de shell que inicializam o sistema, respondem a eventos, controlam as prioridades de execução e compilam, configuram e executam programas. Muitos deles são bastante grandes e complexos.
Os shells fornecem uma infraestrutura que nos permite usar componentes pré-construídos que são vinculados em tempo de execução em vez de tempo de compilação. Esses componentes são programas independentes que podem ser usados sozinhos ou em outras combinações sem recompilar. A sintaxe para chamá-los é indistinguível de um comando embutido do Bash e, de fato, existem vários comandos embutidos para os quais também existe um executável autônomo no sistema, geralmente com opções adicionais.
Não há diferença de desempenho em toda a linguagem entre Python e Bash . Depende inteiramente de como cada um é codificado e quais ferramentas externas são chamadas.
Qualquer uma das ferramentas mais conhecidas como awk, sed, grep, bc, dc, tr, etc. deixará de fazer essas operações em qualquer idioma no pó. O Bash é preferível para qualquer coisa sem uma interface gráfica do usuário, pois é mais fácil e mais eficiente chamar e passar dados de volta de uma ferramenta como as do Bash do que do Python .
atuação
Depende de quais programas o script de shell Bash chama e de sua adequação para a subtarefa que recebem, se o rendimento geral e / ou a capacidade de resposta será melhor ou pior do que o Python equivalente . Para complicar as coisas , o Python , como a maioria das linguagens, também pode chamar outros executáveis, embora seja mais complicado e, portanto, não é usado com tanta frequência.
Interface de usuário
Uma área em que o Python é o vencedor claro é a interface do usuário. Isso a torna uma linguagem excelente para a construção de aplicativos locais ou cliente-servidor, já que oferece suporte nativo a gráficos GTK e é muito mais intuitiva que o Bash .
O Bash só entende texto. Outras ferramentas devem ser chamadas para uma GUI e os dados devolvidos a partir delas. Um script Python é uma opção. Opções mais rápidas, mas menos flexíveis, são os binários como YAD, Zenity e GTKDialog .
Enquanto shells como o Bash funcionam bem com GUIs como Yad , GtkDialog (interface semelhante a XML incorporada para funções GTK +) , dialog e xmessage , Python é muito mais capaz e, portanto, melhor para janelas GUI complexas.
Resumo
Construir com scripts de shell é como montar um computador com componentes prontos para uso, da mesma forma que os desktops.
Construir com Python , C ++ ou qualquer outra linguagem é mais como construir um computador soldando os chips (bibliotecas) e outras partes eletrônicas, como os smartphones.
Os melhores resultados são geralmente obtidos usando uma combinação de linguagens onde cada uma pode fazer o que faz melhor. Um desenvolvedor chama isso de " programação poliglota ".