Alternatives de script aux scripts shell Bash

16

Je viens de migrer vers un poste de travail UNIX. Ma mémoire des scripts shell Bash s'est estompée depuis l'école et je trouve la syntaxe très déroutante. Je me demande quels autres langages de script sont utilisés pour automatiser les tâches. Les deux plus populaires dont j'ai entendu parler sont Perl et Python.

  1. Quel langage de script est le plus utilisé par les boutiques du monde réel?
  2. Quel langage de script ressemble le plus à la syntaxe C / C ++?
  3. Existe-t-il un autre langage de script que je ne connais pas?

Merci de votre aide,

Scott

Scott Davies
la source
2
Cela devrait probablement être un wiki communautaire.
EBGreen
2
J'utilise maintenant PHP pour la plupart des tâches système. Je vais mettre en place une bonne réponse avec cela bientôt. Il a de nombreuses bibliothèques intégrées, ce qui est pratique.
Kyle Hodgson
Les langages destinés à Shell font quelque chose que d'autres langages pourraient ne pas faire; Ce qui consiste à gérer et à contrôler tous les processus enfants jamais générés de manière récursive. Le blog publicitaire Phusion Passenger explique pourquoi en détail: phusion.github.io/baseimage-docker En bref, vos scripts écrits en lang-x ne gèrent probablement pas correctement les routines d'arrêt. Ce qui est parfaitement correct tant que vous les exécutez en tant qu'enfants d'un véritable processus shell. Avertissement, je ne suis pas un expert. Ces informations ne sont, à ma connaissance, que viciées.
ThorSummoner

Réponses:

12

Dans une certaine mesure, c'est une question de préférence personnelle. Perl et Python sont définitivement là-bas en termes de popularité.

Pour répondre à deux de vos trois questions, cependant:

  1. Je suppose que bash est le plus utilisé, probablement suivi de perl. Juste deviner cependant, ne sais pas si quelqu'un a fait une enquête. :)
  2. Il existe des milliards de langages de script. :)

Ma recommandation est cependant Python. Il est facile à lire et à écrire, extrêmement puissant et il existe des tonnes de ressources utiles sur le Web pour l'apprendre, sans parler du code que vous pouvez copier et réutiliser.

DictatorBob
la source
1
Je suis d'accord. Je trouve que Python est facile à apprendre et capable de faire tout ce que je lui lance, car cela a été un bon vieux OS / 2 jours avec REXX.
slovon
3
+1 pour python ... la puissance de C dans un langage de script. Vous pouvez rendre vos scripts aussi simples ou complexes que vous le souhaitez;)
KFro
1
sur les systèmes non NT, le module python shrend l'utilisation de python comme langage de script shell accessible; Cependant, si vous rencontrez des cas marginaux (comme le multitraitement), vous devrez apprendre le module de sous-processus que je trouve trop difficile à utiliser à ce jour.
ThorSummoner
5

Perl et Python sont évidemment les réponses; mais chacun d'eux est utilisé pour effectuer différentes tâches:

  1. Bash - De loin le plus facile à apprendre. Avec les scripts Bash, vous exécutez des commandes et manipulez la sortie.
  2. Python - Deuxième plus facile à apprendre. Python est bien plus utile que Bash car vous pouvez utiliser Python pour écrire des programmes complets, et il est bien pris en charge par la communauté. Python est également extrêmement lisible et facile à modifier des mois plus tard.
  3. Perl - Le meilleur des trois (pour les scripts), mais facilement la courbe d'apprentissage la plus raide. A une très bonne prise en charge des expressions régulières (ce qui est la principale raison pour laquelle il est toujours utilisé aujourd'hui), et vous rencontrerez probablement de nombreux scripts Perl au fil du temps. Le principal problème avec Perl est la lisibilité du code - des mois après avoir écrit du code, vous ne pourrez pas comprendre ce qu'il fait. Donc, vous feriez mieux de commenter lourdement.
  4. Awk / Sed - Les deux sont très utiles, mais tous les deux très difficiles à apprendre. Je suggère de s'attaquer à ces derniers, à moins que vous ne sachiez bien les modèles.

Concernant celui à apprendre en ce moment (puisque vous ne connaissez probablement aucun d'eux), j'apprendrais Python. C'est le plus simple et le plus utile à connaître.

Et quant aux réponses à vos questions:

Quel langage de script est le plus utilisé par les boutiques du monde réel?

Tous, mais j'imagine que Perl a un petit avantage ici (étant qu'il est utilisé depuis plus longtemps dans l'administration système).

Quel langage de script ressemble le plus à la syntaxe C / C ++?

Perl

Existe-t-il un autre langage de script que je ne connais pas?

Ruby, Tcsh / Csh, http://en.wikipedia.org/wiki/Interpreted_language

Michael Pobega
la source
2
Si vous mettez du temps en perl, vous pouvez écrire du perl parfaitement lisible. Les gens qui écrivent du code spaghetti sont trop rapides à blâmer Perl pour leurs échecs.
Cian
1
Je ne parle que sur la base d'expériences en tant qu'administrateur système; J'ai dû maintenir un code écrit par d'autres personnes qui était presque impossible à lire. Habituellement, je finis par réécrire le code en Python.
Michael Pobega
3

awk pour les petits travaux, python pour plus que les oneliners.

Python (si vous n'utilisez pas d'API spécifiques et d'autres choses dépendantes de la plate-forme) a une riche "bibliothèque standard" qui est disponible sur toutes les plates-formes où vous obtenez la version python en cours d'utilisation. C'est très bien car vous pouvez réutiliser vos scripts facilement et signifie que vos connaissances sont un bon investissement même si vous changez de plate-forme.

Dans notre entreprise, nous utilisons python pour tous les scripts, la surveillance, ... et java pour l'application, et nous sommes bien lotis dans un environnement hétérogène.

slovon
la source
1

Je dirais que perl et python sont probablement les deux meilleures alternatives. Vous pouvez aussi faire beaucoup avec sed et awk.

EBGreen
la source
1

Sh (bourne shell), grep, awk et sed est toujours une bonne chose à reprendre. Perl est excellent si vous ne voulez pas beaucoup de regexing de texte et la maintenabilité n'est pas si importante (ne pas dire que ce n'est pas possible). Python; si la lisibilité est importante pour vous. Ma préférence est Python, mais tous ces outils sont bons pour la plupart des choses que vous lui lancez. Vous voudrez peut-être reconsidérer votre exigence de syntaxe c / c ++, rester fidèle ne vous aidera pas à long terme.

Martin P. Hellwig
la source
Merci Martin. J'ai remarqué (à partir d'échantillons sur le Web), que Perl a une ressemblance remarquable avec PHP (même si je suis sûr que c'était Perl avant PHP, historiquement). Est-ce une déclaration juste?
Scott Davies
PHP 1.0 était un script perl, donc ce n'est pas un hasard :)
Bill Weiss
1

Si vous cherchez à apprendre quelque chose à partir de zéro, il est probablement préférable de (ré) apprendre bash.

Au-delà, perl et python sont populaires de nos jours; Je suis amateur de Perl, mais mon style de script Perl n'a pas beaucoup changé depuis la sortie de Perl 4.

Je ne connais aucun langage de script "semblable à la syntaxe c".

David Mackintosh
la source
1

Perl, haut la main, ne serait-ce que pour l'incroyable ressource du CPAN ( http://search.cpan.org/ ). L'avantage d'utiliser un langage de script avec une communauté contributive aussi massive est que vous n'aurez probablement jamais besoin d'inventer quelque chose vous-même.

Perl a également l'avantage d'être aussi complexe que nécessaire pour la situation actuelle. Vous pouvez le traiter comme un simple langage de script pour une administration rapide ou des scripts à usage unique, mais vous pouvez utiliser des concepts orientés objet ou des systèmes de méta-objets étendus lorsque vous souhaitez créer des applications plus grandes et faciles à entretenir (comme les démons, les serveurs, les clients).

Les différences entre les langages de script à eux seuls ne sont pas assez graves pour choisir un gagnant clair, mais vous devez principalement regarder à quel point il vous sera facile de trouver des informations sur les sujets qui vous intéressent.

La syntaxe Perl peut également être très proche de C, tant que vous pouvez contourner le manque de frappe et les sceaux; l'utilisation avancée de perl viendrait naturellement à mesure que vous finirez par apprendre les forces du langage.

Et pour les opposants sur le plan de la lisibilité: vous pouvez écrire du code difficile à lire dans n'importe quelle langue. Si vous regardez votre code d'il y a 4 mois et que vous ne le comprenez pas, vous faites quelque chose de mal.

ps Ce message était rempli de liens vers divers modules conviviaux d'administration sur CPAN, mais apparemment, les nouveaux utilisateurs ne peuvent publier qu'un seul lien, alors utilisez ce lien CPAN pour rechercher des choses comme 'CVS' 'SVN' 'Cron' 'et `` Moose' '(un vaste système d'objets)

jsoverson
la source
1
  • Rubis
  • Python
  • Go - un langage multiplateforme, les scripts sont mentionnés comme l' une des forces de Go .
  • Node.js - voir Grunt.js, Gulp.js. De nombreux projets utilisent désormais Node.js comme outil d'automatisation du shell.
  • Perl
Brian Jordan
la source
1

[pour des conseils généraux de script, voir les autres réponses]

Cette réponse concerne l'utilisation de programmes en ligne de commande et également de grandes chaînes d'entre eux.

Pour exécuter des chaînes de programmes CLI, et peut-être plusieurs chaînes en séquence, bash est le plus simple. Perl peut faire la même chose mais le langage est beaucoup plus difficile à apprendre et est beaucoup plus complexe, et comme beaucoup l'ont souligné, il est facile d'écrire du Perl intelligible.

Si vous parcourez des fichiers et des paramètres, bash est plus facile à démarrer b / c, vous pouvez prototyper dans le shell, puis copier dans un script et ajouter des tableaux et des boucles avec un minimum de surcharge.

Exemples de ce que je veux dire:

$ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG}
$ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS}

En bash, il est facile d'envelopper cela en quelques boucles sur certains de ces paramètres. pourtant , le code devient difficile à lire une fois que le script fait plus de quelques dizaines de lignes. --- imaginez 30 ensembles de commandes (quelques lignes chacune) pour trente tracés de données différents ---

Perl et Python pourraient être meilleurs pour les gros scripts car ils ont une syntaxe plus propre pour les boucles et les variables, mais les commandes bash doivent être générées sous forme de chaînes, exécutées en tant que sous-processus et stdin, stdout capturé. Cela peut être fait, mais il ne peut pas remplacer complètement l'environnement shell natif.

Si les obus avaient une meilleure langue, tout cela serait évité.

romancier
la source
0
  1. le plus utilisé: Perl, principalement pour des raisons historiques. Python est largement disponible dans toutes les distributions Linux et BSD (il est même installé sur Mac OSX), et est beaucoup plus agréable à apprendre / à programmer. Bien sûr, une fois que vous obtenez la syntaxe, Bash est plus simple pour presque tout ce que vous pouvez faire sur la ligne de commande. Après tout, il est la ligne de commande.

    • Syntaxe C: il y a csh , mais vous pouvez facilement installer TCC et utiliser le vrai C comme langage de script, compilé à partir de la source en moins de temps que le démarrage d'autres langages.

    • autres langages de script: beaucoup! Lua , Ruby , JavaScript ...

Javier
la source
0

Vous devriez utiliser une combinaison de tous ceux où cela est approprié. Je n'aime vraiment pas perl (lisibilité), mais c'est bon pour beaucoup de choses. Python, d'autre part, était quelque chose de nouveau pour moi en termes d'administration système, jusqu'à ce que je doive gérer (et dois encore) quelques machines KVM. Démarrer, arrêter, enregistrer, charger, migrer toutes ces machines via un script est devenu réalité après 1 heure de déconner avec les liaisons python de libvirt.

Enfin et surtout, je n'utiliserais pas perl ou python si je dois, disons, vider toutes les bases de données d'un serveur mysql chaque nuit (chaque base de données dans son propre fichier de vidage), les tarer et les synchroniser vers un autre serveur. Pourquoi ? Parce que c'est plus rapide et plus facile de l'écrire en bash :)

En fin de compte, vous devez utiliser le langage qui correspond le mieux à votre tâche actuelle et ne pas utiliser uniquement un langage de script donné simplement parce que vous l'aimez le plus.

sh1ny
la source
0

J'aime le rubis. C'est simple et facile à programmer avec. Il y a un excellent livre sur l' administration du système utilisant ruby .

Ruby est utilisé dans plusieurs systèmes de gestion de configuration (capistrano, chef, marionnette) et dans la dernière version de metasploit.

Vous pouvez utiliser rush , un remplacement du shell Unix avec la syntaxe ruby ​​et faire des choses comme ceci:

local = Rush::Box.new('localhost') 
remote = Rush::Box.new('my.remote.server.com')     
local_dir = local['/Users/adam/myproj/']
remote_dir = remote['/home/myproj/app/']

local_dir.copy_to remote_dir
remote_dir['**/.svn/'].each { |d| d.destroy }
chmeee
la source
Merci chmeee. Je ne savais pas que vous pouviez utiliser Ruby pour l'administrateur système - j'ai toujours pensé qu'il était centré sur le Web. Je cherche quelque chose qui est utilisé dans la plupart des organisations. Est-il juste de dire que Ruby for sysadmin est encore trop saillant?
Scott Davies
1
Shell / Perl sont les deux seules langues que vous pouvez trouver de manière fiable installées partout. Python est probablement le suivant le plus courant, avec rubis exécutant un quatrième très éloigné (en fait, probablement cinquième, derrière awk).
Cian
@ScottDavies PHP et ASP.net sont les seuls langages centrés sur le Web que je connaisse; même Javascript conçu pour fonctionner exclusivement sur le Web a mûri et est devenu le manque de validation des formulaires. Cependant, vous pouvez envoyer du HTML avec n'importe quelle langue, même bash apparemment.
ThorSummoner
0

Exemple de rubis à une ligne:

> echo 'Shell is the best!' | ruby -pe 'gsub("Shell", "Ruby")' 

Ruby is the best!

> printf "foo\nbar\nbaz\n" |  ruby -ne 'BEGIN { i = 1 }; puts "#{i} #{$_}"; i += 1'

1 foo
2 bar
3 baz

J'utiliserais du rubis.

Comparé à sh, il est moderne et puissant.

Comparé à python, c'est la cohérence, une édition, un gestionnaire de paquets. Et je n'aime pas la syntaxe d'indentation.

Comparez avec Perl, un peu old-school et la syntaxe est trop complexe pour moi.

Jacob
la source