Est-il utiliser pour l'écriture de scripts Bash plus?
Je viens de terminer ma deuxième année d'université CS étudiant, donc mon "monde réel" les connaissances sont insuffisantes. J'ai appris Java de ma première année, a continué avec Java et ramassa C et Bash simple
script de mon deuxième. Cet été, je suis en train d'apprendre le Perl (Dieu me vienne en aide). J'ai flirté avec Python un peu dans le passé.
Ma question est, maintenant que nous avons très lisible, très accessible en écriture, les langages de script comme Python, Ruby, Perl, etc, pourquoi personne ne écrire des scripts Bash? Est-il quelque chose que je suis absent? Je sais que mon linux a perl et python. Ne sont-ils pas omniprésent assez? Est-il vraiment quelque chose
c'est plus facile de le faire en Bash que dans certains autres hll?
- Un Anneau pour les gouverner tous, Un Anneau pour les trouver, Un Anneau pour les amener tous et dans les ténèbres les lier - Tolkien
- "Dieu, aide-moi"? Qu'est-ce qui? Perl n'est pas difficile de décrocher!!
- Je n'ai rien à ajouter à ce que les autres ont dit. Mais Bash scripting /toujours/ beats Powershell pour mes utilisations.
- Pas sûr que j'avais du groupe de Perl avec Python/Ruby, lorsqu'on parle de lisibilité...
- Perl a été "très accessible en écriture" de la langue (;
- Dang il! J'ai un jeu de boisson pour l'expression
real-world
. - Chaque binaire est Bash ce qu'est un module Python.
Vous devez vous connecter pour publier un commentaire.
Entre autres choses, bash est utile lorsque plus de ce que vous faites est de la communication et de la tuyauterie entre les différents programmes (dont beaucoup sont également de série). Et il y a de nombreux environnements où bash (ou au moins un Le shell POSIX) est disponible, mais en Perl et Python ne le sont pas.
Et bien sûr, vous devez faire la distinction entre interactive bash script bash. Ubuntu récemment changé de défaut de script shell (
#!/bin/sh
) à dash parce que c'était beaucoup plus rapide. Cependant, bash a des fonctionnalités interactives dash n'a pas (zsh est encore mieux, à mon humble avis).Bash est incroyablement utile dans l'administration du système, de déploiement d'applications web, les données croquer, sutomated sauvegardes, même getting-choses-fait au jour le jour la gestion juste de nom vraiment quelques-uns d'entre eux. Je pense qu'Il est trop tôt pour vous juger un "vétéran C'soldat" comme BASH.
MODIFIER googler autour de:
Je tiens également à mentionner que TextMate un succès OS-X programme a beaucoup de Bash machines à l'intérieur.
La vraie différence entre bash et python est que python est un script d'usage général de la langue, tandis que bash est simplement un moyen de lancer une myriade de petits (et souvent très rapide), les programmes une série. Python peut le faire, mais il n'est pas optimisé pour elle. Les programmes de tri, de recherche, uniq, scp) peut faire des tâches très complexes, très simplement, et bash permet à ces tâches pour interagir de manière très simple avec de la tuyauterie, des bouffées de chaleur de sortie à partir et vers des fichiers ou des périphériques, etc.
Tout en Python, il est possible d'exécuter les mêmes programmes, vous serez forcé de faire des scripts bash dans le script python pour accomplir la même chose, et puis vous êtes coincé avec python et bash. Les deux sont beaux par eux-mêmes, mais à une combinaison de ceux qui ne s'améliorent pas quelque chose à mon humble avis.
Scripts Bash vous permettent de automatiser les tâches en ligne de commande à l'aide de la même langue vous le feriez si vous tapez les commandes manuellement.
Exemple Trivial de liste $PATH
Bash
Python
Pour un grand nombre de tâches, bash peut être très très concis.
Code pour rechercher une chaîne de caractères dans tous les fichiers du répertoire courant et imprimer ces lignes:
Dans bash:
En Python:
Je pense qu'un argument fort que python n'est pas aussi naturel que bash pour de nombreuses tâches, c'est le simple fait que personne n'utilise l'interpréteur de python comme leur coquille. Clairement, c'est possible:
Clairement à l'aide de python pour une coquille est absurde. Bash a été conçu pour l'exécution d'autres programmes. Python a été conçu pour faire des calculs. Alors que, la plupart des choses peuvent être faites dans les deux langues, il y aura toujours des tâches qui peut être fait plus facilement dans bash qu'en python, et vice-versa.
os.path.expanduser
appel. Entièrement pythonic version serait encore pire:os.path.join(os.path.expanduser("~"),"dev")
. Et nous allons même pas penser à la façon dont les IO de redirection si vous avez réellement envie de courir à vim de l'intérieur python. Je pense que mon point est clair.Bien, lors de l'écriture avec bash, vous pouvez directement utiliser tous les outils de que vous avez sur la ligne de commande de votre script. Avec toute autre langue, il faut d'abord exécuter la commande et obtenir un résultat etc. Un script simple (par exemple) permet d'obtenir une liste de processus, traverse grep et obtient un résultat serait beaucoup plus compliqué dans d'autres langues. En tant que tel, bash est toujours un bon outil pour écrire des choses rapides.
De nombreux scripts de démarrage sont traditionnellement écrit que les scripts shell, et il ne semble pas y avoir une tendance à s'éloigner de ceux-ci.
Les scripts Shell sont parfaitement adaptées pour le départ d'autres procédés de collage et de leur entrée/sortie ensemble. C'est une zone où les autres langages de script ne sont pas aussi puissant.
En dehors de cela: même si les langages comme Perl, Python et Ruby deviennent de plus en plus omniprésent, la seule langue que vous êtes pratiquement garanti sur tous les unix-like est le bourne shell (mais pas nécessairement dans la forme de bash) .
En dehors de ce que les autres ont dit, je tiens à souligner ce qui est à mon avis la raison principale pour apprendre le Bash: c'est le (presque) standard de Linux shell.
D'autres langages de script sont certainement utiles, et peut-être beaucoup plus puissant, mais ce que vous devrez faire face lorsque vous avez un terminal en face de vous est... Bash.
Être en mesure de gérer les I/O, des tuyaux et des processus, assing et utiliser des variables, et de faire au moins certains de la boucle et de l'évaluation de l'état est un must si vous voulez gérer un système Linux.
Bash n'est pas seulement un langage de script, mais c'est une coquille.
Python, Ruby et Perl sont grands, mais ils sont les outils les plus généraux; dans certains cas (périphériques intégrés ou d'autres minimaliste systèmes), ils peuvent être considérés comme des ballonnements ou dans d'autres situations, ils peuvent poser un risque pour la sécurité (pour les environnements où vous voulez de sécurité très élevé et essayer d'éliminer les inutiles package).
Dans certains cas, les scripts shell sera bien plus performant grâce à une intégration plus étroite avec les OS.
Aussi, bash est la production éprouvée pour myriade de tâches administratives et il est facile de trouver des scripts qui couvrira très compliqué scénarios (exceptions) et de les gérer correctement.
Plus facile, sans doute pas. Je préfère perl, bash scripting dans de nombreux cas. Bash ne avoir un avantage, même si, en particulier sur les systèmes Linux: c'est tout, mais la garantie d'être installé. Et si elle ne l'est pas, largement compatible avec le père (sh) sera, la cause presque toutes les scripts sont écrits pour les poissons. Même perl n'est pas omniprésent, et c'est everyfreakingwhere.
Si tu fais beaucoup de GUI d'autres choses, vous aurez probablement seulement de répondre à bash chaque fois que vous êtes en train de faire une sorte de personnalisation sur votre propre machine. Divers hacks et des trucs. Si vous utilisez la ligne de commande pour faire des choses, bash est juste indispensable. En fait, être bon sur la ligne de commande nécessite bash ou une autre coque de familiarité.
- Je obtenir des miles de ayant appris Bash quand j'ai voulu naviguer autour de mon disque dur rapidement. J'ai écrit une navigation/menu interface permettez-moi de faisceau de différents dossiers et des fichiers rapidement et facilement. Écrit en bash a été simple et facile. Et il y a beaucoup de facilement accessible et gratuit, des trucs qui vais vous montrer comment.
Aussi, l'apprentissage de Bash est idéal pour comprendre comment Unix et certains de ses trucs vraiment fonctionne, et comment que nous avons parcouru avec des outils comme le Python.
Bash (et l'original de la Bourne sh et une myriade de produits dérivés) est - d'un point de vue - un très haut niveau de la langue. D'où de nombreuses langues, l'utilisation de simples primitives, shell primitives sont des programmes complets.
Qu'il serait peut-être pas le meilleur langage pour exprimer vos tâches, ne signifie pas qu'il est mort, la mort, ou même moribond.
Vous pouvez obtenir un vrai bournesh plus à freshmeat (sur Mac OS X, par exemple, /bin/sh n'est pas un vrai bournesh).
voir: http://www.in-ulm.de/~mascheck/bourne/
Dans mon expérience, Perl répond quelque chose comme 99% de toute nécessité que pourrait exiger un script shell. En prime, il est possible d'écrire du code qui s'exécute sur Windows sans Cygwin. Si je n'aurai pas un Perl installer sur une machine Windows, je veux cible, je peux l'utiliser PAR::Packer ou PerlApp pour produire un exécutable. Python, Ruby et les autres ne fonctionnent tout aussi bien, aussi.
Cependant, les scripts shell n'est pas si compliqué--au moins, les choses que vous devriez être à la programmation dans un shell ne sont pas du tout compliqués. Vous pouvez faire ce que vous devez faire avec un faible niveau de connaissances.
Apprendre à lire et à définir des variables. Comment créer et appeler des fonctions. Comment source d'autres fichiers. Apprendre le contrôle de flux de travaux.
Et le plus important, d'apprendre à lire la coquille de l'homme page. Cela peut sembler facétieux, mais je suis à 100% sérieux-ne vous inquiétez pas à propos de les entasser tous les détails de la création de scripts shell dans votre cerveau, au lieu d'apprendre à trouver ce que vous devez savoir dans la page de man rapidement et efficacement. Si vous vous trouvez à l'aide de scripts shell souvent, les informations pertinentes seront naturellement coller dans votre cerveau.
Donc, oui, à la base de la coquille est la peine d'apprendre.
Je suis un perl gars, mais le nombre de bash (ou ksh) fonctions d'utiliser et de créer sur une base quotidienne est tout à fait significatif. Pour quoi que ce soit impliquée, je vais écrire un script perl, mais pour la navigation de la structure de répertoire, et en particulier pour la manipulation des variables d'environnement bash/ksh/... sont indispensables.
À nouveau, en particulier pour les variables d'environnement, rien ne vaut la coquille, et assez peu de programmes de l'utilisation des variables d'environnement. En Perl, je dois écrire un alias bash ou de la fonction qui appelle le script Perl, qui écrit temporaire script bash qui reçoit de la source après Perl sorties pour faire le changement dans le même environnement que je suis le lancement de.
J'ai fait cela, en particulier pour les lourds de levage sur les variables de chemin d'accès. Mais il n'y a aucun moyen de le faire dans juste Perl (ou python ou ruby... ou du code C pour cette question).
Comme mentionné précédemment, les outils GNU sont grands, et les plus faciles à utiliser à l'intérieur de la coquille. Il est particulièrement agréable si vos données sont déjà dans un linéaire ou tabulaires sous forme de texte brut. Juste comme exemple, l'autre jour, j'ai pu créer un script pour créer un XHTML nuage de mots de n'importe quel fichier texte dans 8 lignes de Bourne Shell, qui est encore moins puissant (mais plus largement pris en charge) que Bash.
Ce que je ne comprends pas est pourquoi les gens disent
bash
quand ils veulent dire toutbourne-shell
compatible coque.Lors de l'écriture de scripts shell: toujours essayez d'utiliser les constructions qui travaillent aussi dans les anciennes bourne shell interprètes ainsi. Il vous permettra d'économiser beaucoup d'ennuis un jour.
Et oui, il y a beaucoup d'usage pour les scripts shell, aujourd'hui, que la coquille toujours exister sur tous les systèmes unix, hors de la boîte, contrairement à perl, python, csh, zsh, ksh (éventuellement?), et ainsi de suite.
La plupart du temps, ils ont seulement ajouter de la commodité ou de syntaxe différente pour les constructions comme les boucles et les tests. Certains ont amélioré les fonctions de redirection.
La plupart du temps, je dirais que l'ordinaire du bourne shell fonctionne aussi bien.
Typique piège:
if ! test $x -eq $y
fonctionne comme prévu dans bash est plus intelligent builtin "si" de l'opérateur, mais la "bonne"if test ! $x -eq $y
devrait fonctionner dans tous les environnements.