web-dev-qa-db-fra.com

Forces de Shell Scripting par rapport à Python

J'ai essayé d'apprendre le script Shell (bash) plusieurs fois mais j'ai été chassé par la syntaxe. Ensuite, j'ai trouvé Python et j'ai pu faire la plupart des choses qu'un script Shell peut faire en Python. Je ne sais plus si je devrais investir mon temps dans l'apprentissage des scripts Shell. Je veux donc demander:

Quelles sont les forces des scripts Shell qui en font un outil indispensable par rapport à Python?

Je ne suis pas un administrateur système de profession, mais je suis intéressé par la mise en place de systèmes Linux pour les utilisateurs à domicile, donc je pense que l'apprentissage des scripts Shell peut devenir nécessaire.

88
Amol Gawai
  • Les scripts shell ont des notations plus simples pour la redirection d'E/S.
  • Il est plus simple de créer des pipelines à partir de programmes existants dans Shell.
  • Les scripts shell réutilisent des programmes entiers.
  • Shell est universellement disponible (sur quelque chose comme Unix) - Python n'est pas nécessairement installé.

'Il est vrai que vous pouvez tout faire dans Python que vous pouvez faire dans Shell;' il est également vrai qu'il y a des choses qui sont faciles dans Python qui sont difficile dans Shell (tout comme il y a des choses qui sont faciles dans Shell mais difficiles en Python). Connaître les deux sera le meilleur à long terme.

77
Jonathan Leffler

"Quelles sont les forces des scripts Shell qui en font un outil indispensable par rapport à Python?"

Le Shell n'est pas indispensable. Pourquoi pensez-vous qu'il y en a autant? bash, tcsh, csh, sh, etc., etc.,

Python est un Shell. Pas celle que vous utiliseriez pour exécuter toutes les commandes , mais pour les scripts, c'est l'idéal.

Python est une partie plus ou moins standard de toutes les distributions Linux.

Les obus plus traditionnels font trop de choses.

  1. Ils ont une interface utilisateur pratique pour exécuter des commandes. Cela inclut les commandes d'une ligne où le Shell recherche votre CHEMIN, exécute et exécute le programme demandé. Il comprend également des pipelines, des séquences et des programmes simultanés (en utilisant ;, | et &) ainsi qu'une redirection (en utilisant > et <).

  2. Ils ont une petite capacité semblable à un langage de programmation pour exécuter des scripts. Ce langage est assez difficile à utiliser et extrêmement inefficace. La plupart des instructions dans ce langage nécessitent un ou plusieurs processus supplémentaires, ce qui fait perdre du temps et de la mémoire.

Exécuter des programmes à partir du Shell, rediriger stderr vers un fichier journal et ce genre de chose est bon. Faites cela dans le Shell.

Presque tout le reste peut être fait plus efficacement et plus clairement en tant que script Python.

Vous avez besoin des deux. Cependant, vous ne devez jamais écrire un script avec des instructions if ou des boucles dans un langage Shell traditionnel.

53
S.Lott

Le Shell rend les actions simples et courantes très simples, au détriment de rendre les choses plus complexes beaucoup plus complexes.

En règle générale, un petit script Shell sera plus court et plus simple que le programme python correspondant, mais le programme python aura tendance à accepter gracieusement les modifications, tandis que le script Shell tendra à devenir de moins en moins maintenable à mesure que le code est ajouté.

Cela a pour conséquence que pour une productivité quotidienne optimale, vous avez besoin de scripts Shell, mais vous devez l'utiliser principalement pour les scripts jetables, et utiliser python partout ailleurs).

29
user97370

Il n'y a rien que vous puissiez faire avec des scripts Shell que vous ne pouvez pas faire avec python. Le gros avantage des scripts Shell est que vous utilisez les mêmes commandes que lorsque vous utilisez le Shell, donc si vous êtes un gros utilisateur Shell, les scripts Shell deviendront à un moment donné un moyen très rapide et facile d'automatiser votre travail Shell. .

Je trouve également qu'il est plus facile de traiter les canaux de données dans les scripts Shell qu'en python, bien que cela soit absolument faisable à partir de python.

Et, enfin, vous n'avez pas besoin de lancer un interpètre supplémentaire pour exécuter les scripts Shell, ce qui vous donne un très petit, mais parfois un avantage notable en termes de vitesse et d'utilisation de la mémoire.

Mais là encore, Python sont beaucoup plus faciles à maintenir, j'essaie de migrer de gros scripts Shell laids vers Python scripts pour cette raison même. C'est également plus facile à faire la gestion des exceptions et QA avec Python.

13
elzapp

il n'est pas nécessaire d'apprendre les scripts Shell, comme l'indiquent toutes les réponses précédentes; mais apprendre n'est jamais une mauvaise chose. c'est vraiment une question de priorités personnelles. il est très difficile pour quelqu'un d'autre de vous dire ce qui vaut et ne vaut pas votre temps.

la plupart des programmeurs trouvent que l'apprentissage de nouvelles langues devient de plus en plus facile à chaque fois. (Il en va de même pour les langues naturelles également.) Et plus vous commencez tôt, mieux c'est.

plus: avoir appris une langue vous permet de dissiper extravagamment ses limites d'une position de connaissance et de familiarité complète. cela ne vous mettra probablement pas au travail, mais pourrait vous rapporter une bière de vos pairs!

9
adrianrf

Je suis d'accord avec la plupart des réponses précédentes. Je considère que les commandes Shell sont les plus adaptées pour effectuer des tâches orientées systèmes de fichiers (copier et déplacer des fichiers, grep, etc.). Shell est meilleur, à mon avis, si vous devez lire et écrire dans un fichier, car une seule redirection >>file.txt S'ajoute au fichier instantanément, au lieu d'avoir besoin, par exemple, de file=open('file.txt','a'); file.write(), etc.

Actuellement, pour mon usage personnel, je mélange les deux, créant un script python et appelant os.system ('command') ou os.popen ('command') chaque fois qu'une action est plus facile dans Shell qu'en python.

8
heltonbiker

Le Shell est disponible partout. Si vous vous en tenez à un ensemble relativement basique de fonctionnalités portables, vos scripts peuvent s'exécuter sur des téléphones portables, des routeurs sans fil, des DVR, des netbooks, des stations de travail, de gros serveurs de fer, etc. Python n'est pas nécessairement inclus dès le départ sur de nombreux systèmes, et selon l'environnement, il peut être difficile de l'installer.

Apprendre certains scripts Shell peut également vous aider à apprendre certaines astuces en ligne de commande, car la ligne de commande est, bien, le Shell. C'est aussi bon pour prendre une ligne de commande assez longue et compliquée, et la convertir en un script plus général après avoir réalisé que vous en aurez besoin de plus.

Le Shell possède également des fonctionnalités assez puissantes; les pipelines sont une construction de contrôle vraiment intéressante qui n'est native que du Shell, pour autant que je sache.

6
Brian Campbell

Une autre chose à considérer lors du choix des scripts Shell de Python est la version Python version qui s'exécutera sur les machines cibles. RHEL5 (pour n'en nommer qu'une) va RHEL5 est bloqué avec Python 2.4. Il y a beaucoup de bibliothèques Nice qui dépendent des fonctionnalités ajoutées à Python post-2.4.

5
nscott