Points forts du script Shell par rapport à Python [fermé]

94

J'ai essayé d'apprendre le script shell (bash) à quelques reprises, 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. Alors je veux demander:

Quelles sont les forces du script 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.

Amol Gawai
la source

Réponses:

82
  • 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 le shell.
  • Le script Shell réutilise des programmes entiers.
  • Shell est universellement disponible (sur tout ce qui ressemble à Unix) - Python n'est pas nécessairement installé.

«Il est vrai que vous pouvez faire tout en Python que vous pouvez faire en shell; C'est aussi vrai qu'il y a des choses qui sont faciles en Python qui sont difficiles en shell (tout comme il y a des choses qui sont faciles en shell mais difficiles en Python). Connaître les deux sera mieux à long terme.

Jonathan Leffler
la source
16
1 et 2, bons points. Le n ° 3 est une faiblesse, car cela entraîne beaucoup de frais généraux que Python peut éviter. # 4 pourrait être en grande partie faux. Python fait maintenant partie de la plupart des distributions Linux.
S.Lott
1
@Svante: écrivez une simple boucle shell pour faire un certain nombre d'opérations en utilisant des commandes comme "test" et "expr" et comparez les temps d'exécution avec un script Python qui utilise le module "os". Les commandes comme test et expr impliquent souvent de forcer un sous-processus pour faire le vrai travail.
S.Lott
2
Je vois le point 3 comme un énorme avantage, pas un inconvénient. Par exemple, envisagez de redimensionner un répertoire plein d'images avec le programme de conversion.
Glenn
7
Il est également à noter en ce qui concerne le n ° 4, c'est que le bashshell n'est pas disponible universellement sur toutes les distributions Linux, en particulier celles pour les systèmes embarqués, et d'autres exécutant l' busyboxexécutable. Les scripts qui ciblent le Bourne shell lui-même, avec lequel il bashest rétrocompatible, fonctionneront sur tous les systèmes compatibles POSIX, mais ce langage est beaucoup plus restreint que celui implémenté par bash.
intuité
5
@intuited: eval "$ (historique 2 | tête -1 | perl -pe 's / (? <= qui est) le plus probablement / au moins /')"; history -d $ (history 2 | head -1 | sed 's / ^ \ s * ([0-9] \ +) / \ 1 /')
intuitif
54

"Quelles sont les forces du script shell qui en font un outil indispensable par rapport à Python?"

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

Python est un shell. Ce n'est pas celui que vous utiliseriez pour exécuter toutes les commandes, mais pour les scripts, c'est idéal.

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

Les coquilles plus traditionnelles font trop de choses.

  1. Ils ont une interface utilisateur pratique pour exécuter des commandes. Cela inclut les commandes sur une ligne où le shell recherche votre PATH, fourche et exécute le programme demandé. Il comprend également des pipelines, des séquences et des programmes simultanés ( à l' aide ;, |et &), ainsi que certains redirection ( en utilisant >et <).

  2. Ils ont une petite capacité minable 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 de forger un ou plusieurs processus supplémentaires, ce qui fait perdre du temps et de la mémoire.

Exécuter des programmes depuis le shell, rediriger stderr vers un fichier journal et ce genre de chose est bien. Faites cela dans la coquille.

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.

S.Lott
la source
1
@intuited. A) La prolifération de différentes coquilles atteste du nombre de caractéristiques qui s'accroissent en "coquille"; ce n'est pas son rôle essentiel, mais c'est un fourre-tout pour les fonctionnalités. B) L'interpréteur python est un shell Unix approprié, il utilise # !. C) Une ifinstruction shell "simple" implique souvent l'exécution du testprogramme. Le shell est un langage de programmation minable à tous égards.
S.Lott
4
@S. Lott: On dirait qu'une certaine dissonance sémantique est dans le circuit ici. Ma définition d'un shell UNIX serait un interpréteur dont le langage est principalement orienté vers le contrôle, à un niveau élevé, du fonctionnement d'un système UNIX. Selon cette définition, une sorte de shell est certainement essentielle au fonctionnement d'un système UNIX, et Python ne se qualifie pas. Comment définiriez-vous ce terme?
intuité
1
@ S.Lott: Je ne suis pas un grand fan de la syntaxe utilisée dans les scripts shell traditionnels, mais je la trouve tout à fait utilisable et appropriée dans de nombreuses situations où l'objectif principal est de contrôler les processus et le flux de leur sortie. Cela nécessite souvent de prendre des décisions et d'itérer. Les shells modernes ( bashau moins) ont des constructions intégrées pour gérer la prise de décision (par exemple, testest une construction bashintégrée, en plus de constructions plus polyvalentes). Il a certes ses faiblesses, mais aussi ses atouts. Cela vaut également la peine d'être appris en détail car il s'agit d'un paradigme très différent des autres types de langues.
intuité
1
@intuited: "trouvez-le tout à fait utilisable" est un hommage à votre compétence, pas à votre langage minable. Python peut être plus utilisable par des personnes moins compétentes.
S.Lott
3
@ S.Lott: Intéressant, vous avez une philosophie très différente de moi. Je pense que la conception et les opérations sont essentiellement des poulets et des œufs. C'est-à-dire qu'un script shell est un programme qui exécute des programmes. Beaucoup de ces programmes ont été initialement implémentés sous forme de scripts shell de plus en plus complexes. À un moment donné, cela a valu la peine, probablement autant par souci d'efficacité que de modularité, que certains d'entre eux soient réécrits en C, et plus tard, en Python. Par exemple: à un moment donné, il a cat "$1" | ssh "$2" "cat - >\"$1\""engendré scp. Ils savaient comment le concevoir au mieux car ils l'utilisaient déjà.
intuitif
31

Le shell rend les actions courantes et simples vraiment 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 aura tendance à 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 des scripts jetables et utiliser python partout ailleurs.


la source
14

Vous ne pouvez rien faire avec les 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 de shell, le script shell deviendra à un moment donné un moyen très rapide et facile d'automatiser votre travail de shell. .

Je trouve également plus facile de gérer les tubes 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 avantage, mais parfois peut-être notable, en termes de vitesse et d'utilisation de la mémoire.

Mais là encore, les scripts Python sont beaucoup plus faciles à maintenir, j'essaie de migrer de gros scripts shell laids vers des scripts Python pour cette raison même. Il est également plus facile de gérer les exceptions et le contrôle qualité avec Python.

elzapp
la source
9

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 aussi.) et plus vous commencez tôt, mieux c'est.

plus: avoir appris une langue vous permet de dissiper de manière extravagante ses limites d'une position de connaissance et de familiarité complètes. cela ne vous fera probablement pas baiser, mais pourrait vous rapporter une bière de vos pairs!

adrianrf
la source
8

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ème de fichiers (copier et déplacer des fichiers, grep, etc.). Shell est préférable, à mon avis, si vous devez lire et écrire dans un fichier, car une seule >>file.txtredirection s'ajoute instantanément au fichier, au lieu d'avoir besoin, par exemple file=open('file.txt','a'); file.write(), etc.

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

heltonbiker
la source
6

La coque 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 postes de travail, de gros serveurs de fer, etc. Python n'est pas nécessairement inclus dans la boîte sur de nombreux systèmes, et selon l'environnement, il peut être difficile de l'installer.

L'apprentissage de certains scripts shell peut également vous aider à apprendre quelques astuces de ligne de commande, puisque la ligne de commande est, eh bien, le shell. C'est également bon pour prendre une ligne de commande assez longue et compliquée, et la convertir en un script plus général une fois que vous vous rendez compte que vous en aurez encore plus besoin.

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

Brian Campbell
la source
5

Une autre chose à considérer lors du choix des scripts shell de Python est la version Python qui sera exécutée sur les machines cibles. RHEL5 (pour n'en nommer qu'un) existera encore longtemps. RHEL5 est bloqué avec Python 2.4. Il existe de nombreuses bibliothèques intéressantes qui dépendent des fonctionnalités ajoutées à Python post-2.4.

nscott
la source