Langages De Script : Les Alternatives Aujourd'hui 1/85 Langages De Script
Total Page:16
File Type:pdf, Size:1020Kb
LANGAGES DE SCRIPT LES ALTERNATIVES AUJOURD'HUI Jacquelin Charbonnel Journées Mathrice – Dijon – Mars 2011 Version 1.1 Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 1/85 Langages de script #!/bin/bash ● à l'origine – langage de macro-commandes mkdir /users/alfred usermod -d /users/alfred alfred – huile inter application passwd alfred groupadd theproject usermod -G theproject alfred Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 2/85 Langages de script #!/bin/bash ● à l'origine login=$1 – langage de macro-commandes group=$2 – huile inter application mkdir /users/$login ● + variables + arguments usermod -d /users/$login $login passwd $login groupadd $group usermod -G $group $login Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 3/85 Langages de script ● à l'origine – langage de macro-commandes – huile inter application ● + variables + arguments ● + des commandes internes read r Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 4/85 Langages de script ● à l'origine – langage de macro-commandes – huile inter application ● + variables + arguments ● + des commandes internes ● + des conditions if ! echo "$r"|grep '^[yYoO]' ; then echo "aborted !" ; exit 1 ; fi Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 5/85 Langages de script ● à l'origine – langage de macro-commandes – huile inter application ● + variables + arguments ● + des commandes internes ● + des conditions ● + des boucles Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 6/85 Petite histoire des shells Unix Thomson shell – 1971 – pas de variables, if et goto externes PWB shell – 1973 – variables, variables d'environnement Bourne shell – 1977 – for..do..done csh – 1978 – C-like, innovant, + moderne tcsh – 1981 – completion, command history ksh – 1983 zsh – 1990 bash – 1996 Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 7/85 ● Ken Thompson : – l'homme qui créa le langage B ! if ... fi case ... esac Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 8/85 ● Ken Thompson : – l'homme qui créa le langage B ! if ... fi case ... esac for ... do ... done foreach ... end while ... do ... done while ... end until ... do ... done csh branche Bourne branche Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 9/85 ● Ken Thompson : – l'homme qui créa le langage B ! if ... fi case ... esac for ... do ... done foreach ... end while ... do ... done while ... end until ... do ... done csh branche Bourne branche for ... rof until ... litnu while ... elihw Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 10/85 Exercice ● Y voir un peu plus clair dans les logs de sendmail | postfix ● Jul 25 04:02:09 tonton postfix/local[5432]: 52BD11744C: to=<[email protected]>, orig_to=<root>, relay=local, delay=6.8, delays=3.5/0/0/3.3, dsn=2.0.0, status=sent (delivered to command: /usr/bin/procmail) Jul 25 04:02:09 tonton postfix/qmgr[2125]: 52BD11744C: removed Jul 25 04:03:05 tonton postfix/smtpd[5426]: disconnect from netsrv.math[172.19.45.20] Jul 25 04:03:05 tonton postfix/qmgr[2125]: 479521744B: from=<[email protected]>, size=4418700, nrcpt=1 (queue active) Jul 25 04:03:05 tonton spamc[6085]: skipped message, greater than max message size (512000 bytes) Jul 25 04:03:05 tonton postfix/local[5427]: 479521744B: to=<[email protected]>, relay=local, delay=60, delays=59/0/0/0.36, dsn=2.0.0, status=sent (delivered to command: /usr/bin/procmail) Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 11/85 ● ne garder que les lignes contenant to= ou from= $ grep -E ' to=| from=' /var/log/maillog Jul 25 10:43:02 tonton postfix/qmgr[2125]: F17EB1744A: from=<[email protected] gers.fr>, size=3140, nrcpt=1 (queue active) Jul 25 10:43:02 tonton postfix/local[21913]: F17EB1744A: to=<[email protected] h>, relay=local, delay=0.88, delays=0.05/0/0/0.83, dsn=2.0.0, status=sent (del ered to command: /usr/bin/procmail) Jul 25 10:45:36 tonton postfix/qmgr[2125]: 2553F1744A: from=<winyourbuyin-3960 vica-alpha.com>, size=11285, nrcpt=1 (queue active) Jul 25 10:45:39 tonton postfix/local[22556]: 2553F1744A: to=<[email protected] ers.fr>, relay=local, delay=3.3, delays=0.04/0.01/0/3.2, dsn=2.0.0, status=sen (delivered to command: /usr/bin/procmail) Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 12/85 ● ne garder que l'info qui nous intéresse $ grep -E ' to=| from=' /var/log/maillog | awk '{print $6,$7}' | sort 1B9B11744A: to=<[email protected]>, BE8D91744A: from=<[email protected]>, BE8D91744A: to=<[email protected]>, 50A1A1744A: from=<[email protected]>, 50A1A1744A: to=<[email protected]>, 4D42A1744A: from=<[email protected]>, 4D42A1744A: to=<[email protected]>, 96DC01744A: from=<[email protected]>, 96DC01744A: to=<[email protected]>, Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 13/85 ● 1 seule ligne par mail $ grep -E ' to=| from=' maillog |awk '{print $6,$7}'| sort | sed '/^.*$/N;s/\n/ /' 008181744A: from=<[email protected]>, 008181744A: to=<[email protected]>, 0087C1744A: from=<[email protected]>, 0087C1744A: to=<[email protected] angers.fr>, 008F817453: from=<[email protected]>, 008F817453: to=<[email protected]>, 009801744C: from=<[email protected]>, 009801744C: to=<[email protected]>, Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 14/85 ● ne garder que les champs intéressants $ grep -E ' to=| from=' maillog |awk '{print $6,$7}'| sort | sed '/^.*$/N;s/\n/ /' | awk '{print $1,$2,$4}' 008181744A: from=<[email protected]>, to=<[email protected]>, 0087C1744A: from=<[email protected]>, to=<[email protected]>, 008F817453: from=<[email protected]>, to=<[email protected] angers.fr>, 009801744C: from=<[email protected]>, to=<[email protected]>, Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 15/85 bash script usage() { ● + des fonctions echo "Usage: $0 username dbname" exit 2 } Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 16/85 bash script a=3 ● + des fonctions b=2 ● + de l'arithmétique c=`expr \( $a + $b \) / 2` # pour faire (3+2)/2 ! d=$(( ( $a + $b ) / 2 )) # idem en + moderne Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 17/85 bash script #!/bin/bash declare -a mon_tableau # déclare le tableau ● + des fonctions ● + de l'arithmétique mon_tableau=( nuage soleil neige ) ● + des tableaux echo ${mon_tableau[2]} echo ${mon_tableau[*]} # tous les éléments nb=${#mon_tableau[*]} echo $nb # le nombre d'élément for ((i=0;i<$nb;i++)); do echo ${mon_tableau[${i}]} done Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 18/85 STOP ! Pourquoi ne pas utiliser un vrai langage de programmation ?!? Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 19/85 ● De quoi l'ASR a-t-il besoin ? – développer rapidement de petits scripts utilitaires – jongler en désinvolte avec les chaînes de caractères – en option : ● programmer des algorithmes complexes ● profiter de structures de données évoluées – efficacité, performance ? bof ! ● Ce qu'il faut : – faiblement typé ● erreurs détectées le + tard possible (voire pas du tout ! ) – syntaxe concise (on n'a pas que ça à faire !) – traitement agréable des re – des tableaux, des listes, des hashs Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 20/85 ● awk (1977) ● REXX (1982) ● Perl (1987) ● TCL (1988) ● Python (1991) ● LUA (1994) ● Ruby (1995) ● PHP (1995) ● Pike (1996) ● Scriptol (2001) ● Go (2009) Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 21/85 ● awk (1977) ● REXX (1982) ● Perl (1987) ● TCL (1988) ● Python (1991) ● LUA (1994) ● Ruby (1995) ● PHP (1995) ● Pike (1996) ● Scriptol (2001) ● Go (2009) Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 22/85 Concision : le minimum ● le plus petit programme qui ne fait rien bash awk Perl Python Ruby C Java # car. 0 0 0 0 0 20 68 #include <stdio.h> main() { return 0 ; } public class smallest { public static void main(String[] args) { } Jacquelin Charbonnel – Journées Mathrice, Dijon, mars 2011 Langages de script : les alternatives aujourd'hui 23/85 Concision : hello world bash awk Perl Python Ruby C Java car. 16 26 21 19 18 69 115 echo Hello World BEGIN{print "Hello Wolrd"} print "Hello World\n" print "Hello World" puts "Hello World" #include <stdio.h> main() { puts("Hello World"); return 0; } public class hello_world { public static void main(String[] args)