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.
bash
shell 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'busybox
exécutable. Les scripts qui ciblent le Bourne shell lui-même, avec lequel ilbash
est rétrocompatible, fonctionneront sur tous les systèmes compatibles POSIX, mais ce langage est beaucoup plus restreint que celui implémenté parbash
."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.
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<
).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.
la source
if
instruction shell "simple" implique souvent l'exécution dutest
programme. Le shell est un langage de programmation minable à tous égards.bash
au moins) ont des constructions intégrées pour gérer la prise de décision (par exemple,test
est une constructionbash
inté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.cat "$1" | ssh "$2" "cat - >\"$1\""
engendréscp
. Ils savaient comment le concevoir au mieux car ils l'utilisaient déjà.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
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.
la source
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!
la source
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.txt
redirection s'ajoute instantanément au fichier, au lieu d'avoir besoin, par exemplefile=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.
la source
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.
la source
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.
la source