GNU/Linux >> Tutoriels Linux >  >> Linux

Quand utiliser Bash et quand utiliser Perl/Python/Ruby ?

TL;DR - utiliser bash uniquement pour installer une meilleure langue (si elle n'est pas déjà disponible), sinon vous perdez un temps humain précieux et irrécupérable. Si vous ne pouvez pas le faire manuellement sur la ligne de commande sans erreur, ne faites pas de script avec bash/shell.

Nous sommes en 2015, j'envisagerais donc ce qui suit :

  1. surcharge de mémoire

    • La surcharge de mémoire d'exécution Ruby/Python par rapport à bash est minime (à cause des bibliothèques partagées), alors que l'on ne peut probablement pas maintenir un script bash non trivial de toute façon (c'est-à-dire un avec> 100 lignes) - donc l'utilisation de la mémoire n'est pas un facteur
  2. temps de démarrage

    • Le démarrage de Ruby/Python peut être un peu plus lent, mais il est probable que vous n'exécuterez pas beaucoup de processus Ruby/Python complets dans une boucle serrée 100 fois par seconde (si vous avez ce genre de besoins, bash /shell est trop lourd de toute façon et vous devrez probablement passer à C/C++)
  3. performances

    • presque tous les calculs de données typiques seront plus rapides en Ruby/Python - ou au moins comparables (ou, vous avez besoin de C/C++/Haskel/OCaml/quoi que ce soit de toute façon)
    • les véritables performances/goulots d'étranglement dans l'exécution (ou même la productivité) ne seront presque jamais être "un manque d'utilisation de bash/shell" (même le tableau de bord de commutation d'Ubuntu pour le démarrage montre à quel point bash est en fait le problème - et une boîte occupée est probablement le seul cas d'utilisation, car il existe rien de plus que 'bash' et 'vi' pour écrire et exécuter du code, et il n'y a souvent aucun moyen d'ajouter/télécharger ou de stocker quoi que ce soit d'autre)
    • exécuter d'autres processus pour faire le travail (comme sed/awk/grep) est en fait beaucoup plus lent que d'appeler une méthode sur un objet actif en mémoire
  4. productivité

    • il est trop facile de faire des erreurs dans Bash/shell par rapport à l'utilisation de "vraies" méthodes, paramètres, variables et exceptions dans Ruby/Python
    • Agile est courant, alors que Bash n'a pas de support pour cela (manque de capacités de test unitaire, de bibliothèques, d'OO, de modularité, de linting, d'introspection, de journalisation, de métaprogrammation ; presque impossible de refactoriser sans casser quelque chose)
    • beaucoup trop d'incompatibilités avec d'autres shells, des variables d'environnement mineures peuvent complètement casser un script (et certains outils de développement importants comme Puppet ignorent les lignes shebang et transmettent ou réécrivent des variables shell importantes), tandis que Ruby/Python ont des variables bien définies des chemins de migration relativement fluides, même pour les changements de version majeurs
    • apprendre un nouveau langage prend une fraction du temps passé à déboguer des scripts shell en raison de problèmes spécifiques au shell (notamment - noms de variables, pas de booléens, pas d'exceptions, etc.)
    • même les scripts de démarrage sont une mine terrestre (surtout car ils peuvent échouer pendant le système startup), et étant donné les récentes failles de sécurité avec bash, vous feriez peut-être mieux d'utiliser du C ordinaire (avec de bonnes bibliothèques) - oui, C a besoin d'être compilé, configuré, etc., mais même un simple script shell peut avoir besoin d'un référentiel, puis versioning , puis l'emballage de toute façon.
    • tout ce qui est disponible avec sed/awk/grep est probablement déjà intégré à Ruby/Python - sans qu'il s'agisse d'une dépendance ou de "différences" entre les versions de ces outils sur les plates-formes (et alors si cela fonctionne sur votre configuration)
  5. sécurité de l'emploi
    • Quel est l'intérêt d'obtenir un emploi que vous n'aimez pas ? (à moins que vous n'aimiez passer toutes ces heures à déboguer des bogues de script shell difficiles à déboguer mais faciles à créer)

Je trouve qu'il n'y a aucune raison d'utiliser Bash/Shell si Ruby/Python est installé.

Et l'installation de Ruby/Python n'a probablement même pas besoin d'un script bash en premier lieu (à l'exception de busybox, certains outils système dépendent de toute façon de la présence de Python/Perl).

Et chaque fois que vous écrivez un script shell, vous vous "exercez" à faire exactement cela - au lieu d'apprendre quelque chose de plus puissant/productif.

Pourquoi les gens utilisent-ils Bash de nos jours ? Parce que c'est une habitude terrible et difficile à briser. Un script est rarement "fini pour toujours" après les premières minutes - peu importe à quel point les gens ont tendance à penser de cette façon. Avec le sophisme "c'est le dernier bogue de ce script".

Conclusion :utilisez bash/shell uniquement lorsque vous êtes absolument forcé à (comme ~/.bashrc , busybox), car ce n'est presque jamais "le bon outil pour le travail" de nos jours.


Étant donné un problème que les deux peuvent gérer, vous voudrez utiliser celui avec lequel vous êtes le plus à l'aise. En fin de compte, il y a beaucoup de petits détails, et seule l'expérience peut vous apprendre à les voir.

Bash est un langage de script à usage général, tout comme Python, Ruby, Perl, mais chacun a des atouts différents par rapport aux autres. Perl excelle dans l'analyse de texte, Python prétend être le plus élégant du groupe, les scripts Bash sont excellents pour "faire circuler des choses", si vous voyez ce que je veux dire, et Ruby... eh bien, Ruby est un peu spécial dans beaucoup de manières.

Cependant, les différences entre eux n'ont vraiment d'importance qu'une fois que vous avez une bonne expérience de script à votre actif. Je vous suggère de choisir une langue et de la pousser à ses limites avant de passer à la suivante. Vous pouvez faire beaucoup dans un script shell, plus que la plupart des gens ne l'admettraient. N'importe quelle langue est aussi difficile que vous voulez la faire. Une fois que vous y avez écrit quelques éléments, chaque langue est "facile" pour vous.

Être familier avec le shell est rapidement payant si vous vivez sous Linux, alors peut-être que vous voulez commencer par ça. Si vous trouvez une tâche impossible ou peu pratique à résoudre dans un script shell, utilisez autre chose.

N'oubliez pas non plus que l'apprentissage des scripts shell est très simple. Sa véritable puissance réside dans d'autres programmes, comme awk, sed, tr, et al.


J'utilise bash lorsque mon objectif principal est la gestion des fichiers. Cela peut inclure le déplacement, la copie et le changement de nom de fichiers, ainsi que l'utilisation de fichiers comme entrée pour d'autres programmes ou le stockage de la sortie d'autres programmes dans des fichiers. J'écris rarement du code bash qui examine réellement le contenu d'un fichier ou génère la sortie à écrire dans un fichier; Je laisse cela aux autres programmes (que je peux écrire en Perl ou en python) que je lance via bash.

J'utilise Perl et python lorsque mon objectif principal est de lire des données à partir de fichiers, de traiter ces données d'une manière ou d'une autre et d'écrire des sorties dans des fichiers. Si je me retrouve à utiliser (en Perl) le system commande, back ticks ou (en python) le subprocess module trop largement, j'envisage d'écrire le script en bash. D'un autre côté, je commence parfois à ajouter tellement de fonctionnalités à un script bash qu'il est finalement plus logique de le réécrire en Perl/python plutôt que de gérer le support limité (par comparaison) de bash pour la portée variable, les fonctions, les structures de données, etc. .


Linux
  1. Antivirus sur Linux :dois-je vraiment l'utiliser et si oui, quand en ai-je besoin ?

  2. Dans Bash, quand créer un alias, quand créer un script et quand écrire une fonction ?

  3. Quand et pourquoi devrais-je utiliser Apt-get Update ?

  4. Pouvons-nous utiliser du code C en Python ?

  5. Quand utiliser pthread_exit() et quand utiliser pthread_join() sous Linux ?

Utilisez ce script Bash utile pour observer les étoiles

Comment utiliser bash if -z et if -n pour tester des chaînes sous Linux

Comment installer et utiliser Python-Mistune sous Linux

Installer et utiliser WPscan (scanner de sécurité WordPress) sous Linux

Bash Scripting Part6 - Créer et utiliser des fonctions Bash

Comment installer et utiliser Ruby sur les distributions Linux