Flux mainframe typique ...
Input Disk/Tape/User (runtime) --> Job Control Language (JCL) --> Output Disk/Tape/Screen/Printer
| ^
v |
`--> COBOL Program --------'
Flux Linux typique ...
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 |
: :
Les shells sont la colle de Linux
Les shells Linux comme sh / ksh / bash / ... fournissent des fonctions de désignation d'entrée / sortie / de contrôle de flux un peu comme l'ancien langage de contrôle des travaux mainframe ... mais sous stéroïdes! Ce sont des langages complets de Turing à part entière tout en étant optimisés pour transmettre efficacement les données et le contrôle vers et depuis d'autres processus d'exécution écrits dans n'importe quel langage pris en charge par l'O / S.
La plupart des applications Linux, quelle que soit la langue dans laquelle la majeure partie du programme est écrite, dépendent des scripts shell et Bash est devenu le plus courant. Cliquer sur une icône sur le bureau exécute généralement un court script Bash . Ce script, directement ou indirectement, sait où se trouvent tous les fichiers nécessaires et définit les variables et les paramètres de ligne de commande, appelant finalement le programme. C'est l'utilisation la plus simple d'un shell.
Linux tel que nous le connaissons cependant ne serait guère Linux sans les milliers de scripts shell qui démarrent le système, répondent aux événements, contrôlent les priorités d'exécution et compilent, configurent et exécutent des programmes. Beaucoup d'entre eux sont assez vastes et complexes.
Les shells fournissent une infrastructure qui nous permet d'utiliser des composants pré-construits qui sont liés entre eux au moment de l'exécution plutôt qu'au moment de la compilation. Ces composants sont des programmes autonomes à part entière qui peuvent être utilisés seuls ou dans d'autres combinaisons sans recompilation. La syntaxe pour les appeler est indiscernable de celle d'une commande intégrée Bash , et il existe en fait de nombreuses commandes intégrées pour lesquelles il existe également un exécutable autonome sur le système, ayant souvent des options supplémentaires.
Il n'y a pas de différence de performances entre Python et Bash à l' échelle du langage . Cela dépend entièrement de la manière dont chacun est codé et des outils externes appelés.
N'importe lequel des outils bien connus comme awk, sed, grep, bc, dc, tr, etc. laissera faire ces opérations dans l'une ou l'autre langue dans la poussière. Bash est alors préféré pour tout ce qui n'a pas d'interface utilisateur graphique car il est plus facile et plus efficace d'appeler et de renvoyer des données à partir d'un outil comme ceux avec Bash que Python .
Performance
Cela dépend des programmes appelés par le script shell Bash et de leur adéquation à la sous-tâche qui leur est donnée, que le débit global et / ou la réactivité soient meilleurs ou pires que l'équivalent Python . Pour compliquer les choses, Python , comme la plupart des langages, peut également appeler d'autres exécutables, bien qu'il soit plus lourd et donc moins utilisé.
Interface utilisateur
L' interface utilisateur est un domaine dans lequel Python est clairement le gagnant. Cela en fait un excellent langage pour créer des applications locales ou client-serveur car il prend en charge nativement les graphiques GTK et est beaucoup plus intuitif que Bash .
Bash ne comprend que le texte. D'autres outils doivent être appelés pour une interface graphique et les données renvoyées par eux. Un script Python est une option. Les options plus rapides mais moins flexibles sont les binaires comme YAD, Zenity et GTKDialog .
Alors que les shells comme Bash fonctionnent bien avec les interfaces graphiques telles que Yad , GtkDialog (interface de type XML intégrée aux fonctions GTK +) , dialog et xmessage , Python est beaucoup plus performant et donc meilleur pour les fenêtres graphiques complexes.
Résumé
Construire avec des scripts shell, c'est comme assembler un ordinateur avec des composants prêts à l'emploi comme le sont les ordinateurs de bureau.
Construire avec Python , C ++ ou la plupart des autres langages, c'est plus comme construire un ordinateur en soudant les puces (bibliothèques) et autres composants électroniques ensemble comme le sont les smartphones.
Les meilleurs résultats sont généralement obtenus en utilisant une combinaison de langues où chacun peut faire ce qu'il fait le mieux. Un développeur appelle cela « programmation polyglotte ».