0
State al comando con la command line                                 $  Giuseppe Maxia  The Data Charmer  QA Director, Con...
Giuseppe Maxia  Un po di informazioni personali      ‣ Noto anche come "The Data Charmer"      ‣ Direttore del controllo d...
Di cosa parliamo  Questa sessione parla della linea di comando      ‣ Strumenti e suggerimenti per             bar        ...
Definiamo il problema  Quando serve usare la linea di comando ...      ‣ Supponiamo che abbiate un documento             • ...
Aumentiamo il problema  Quando serve usare la linea di comando ...      ‣ Supponiamo che abbiate un documento             ...
Modificare una data con vi  Questo e uno dei modi ...   Il vostro testo contiene 12-25-2012 e anche   08-31-1978, e perfino...
Modificare una data con vi  Questo e uno dei modi ...   Il vostro testo contiene 2012.25.12 e anche   1978.31.08, e perfino...
In effetti, potete anche usare OpenOffice      ‣ Se sapete usare espressioni regolari, anche con        OpenOffice o LibreOf...
Ma il problema può farsi più interessante  Quando veramente serve usare la linea di comando ...      ‣ Supponiamo che abbi...
Molte date da cambiare in + documenti  Qui nessuno batte la command line  perl -i -pe s/(dd)-(dd)-(d{4})/$3.$2.$1/g *.txt ...
Intermezzo  Che diavolo sono quei segni orribili sullo schermo?      ‣ Espressioni regolari (regular expressions)      ‣ U...
Espressioni regolari in due schermate  Cercare un carattere in un testo e molto facile  $ (echo "Ciao"; echo "mondo"; echo...
espressioni regolari in due schermate Certi caratteri hanno un senso particolare$ (echo "Ciao"; echo "mondo"; echo "2012")...
Ho barato. Ce una terza schermata Certi caratteri hanno un senso ancora piu particolare$ (echo "Ciao"; echo sei nel;echo "...
In realtà ci sarebbero altre schermate ...  Ci sono tante cose da imparare!      ‣ Ma la lasciamo per        unaltra sessi...
?       ‣ Perché usare la                           linea di                           comando?                           ...
Una storia di apprendimento  Quello che ho imparato con Microsoft diventa inutile dopo  pochi anni. Quello che ho imparato...
Introduciamo la linea di comando  Per principianti                ||||                         ‣ Prima di tutto: niente pa...
Che cosa e il panico da command line?  Quando un principiante incontra la linea di comando       $_                       ...
La linea di comando  Un po di conoscenza e passa la paura      ‣ Principi                                          20Frida...
La shell  Il personaggio principale      ‣ E un interprete di comandi      ‣ Ce sono vari dialetti             •       bas...
i comandi interni della shell  la shell può fare molte cose senza aiuto di altri      ‣ echo      ‣ export      ‣ alias   ...
i comandi esterni  E poi ci sono programmi che si trovano in tutte le macchine  Unix      ‣ man, ls, cd, find, grep      ‣ ...
E altri strumenti  Per completare il quadro      ‣ Shell scripts      ‣ Aliases      ‣ Perl             Che può sostituire...
Uno strumento che useremo  E il gestore del database MySQL      ‣ Si chiama "mysql"      ‣ Riceve comandi SQL      ‣ Li in...
Se non fosse chiaro finora ..  Meglio specificare ...      ‣ Le azioni alla linea di comando sono:             •       coman...
La filosofia di Unix (I)  Che non e uno stile di vita, ma un modo efficiente di lavorare      ‣ Uno strumento per ogni funzio...
La filosofia di Unix (II)  E un po come "Usa la forza!" ma funziona!  ‣ Per far cooperare diversi strumenti:             •  ...
Unix pipes (flussi applicativi)  Lingresso e luscita di unapplicazione possono essere diretti a  unaltra                   ...
Unix pipes = elaborazione parallela  Non si deve aspettare che la prima applicazione abbia finito per  cominciare a elabora...
Dove vanno i vostri comandi  I comandi inseriti alla tastiera possono andare a finire in diverse  applicazioni             ...
Dove sono i destinatari  Il comando inserito al terminale talvolta viaggia lontano                                        ...
Chi riceve che cosa  Vediamo alcuni casi                         $ mysql -u username -ppassword                           ...
Chi riceve che cosa  Vediamo alcuni casi                    $ mysql -u username -ppassword                       -e "selec...
Chi riceve che cosa  Vediamo alcuni casi                    mysql> help                    mysql> pager less     goes to t...
La linea di comando  Un componente importante ma poco noto      ‣ READLINE             •       Componente comune          ...
readline (1)  Ci sono combinazioni di tasti che salvano la vita                 Ctrl A   Inizio, fine della riga          ...
readline (2)  Per cambiare il testo                     Meta U        Trasforma parola in                                 ...
bash  Il primo attore      ‣ Componenti:             •             •             •                     comandi            ...
Comandi  Sono i comandi interni ed esterni  $ echo "something"  something                                      40Friday, O...
Alias  Creazione di nuovi comandi al volo  $ alias mydate=mysql -e "select NOW()"  $ mydate  +---------------------+  | no...
Alias  Un alias si può usare dentro un altro alias  $ alias myself=mysql  $ myself -e "select NOW()"  +-------------------...
Variables  Valori che sostituiscono testo  $ MYBATCH=mysql -N -B  $ MYQUERY=select curdate()  $ $MYBATCH -e "$MYQUERY"  20...
Variabili annidate  Una dentro laltra!  # t.sh   CMD="SELECT TABLE_NAME"   TBL=information_schema.tables   WHC1="TABLE_SCH...
Uso delle variabili annidate  Le variabili vengono espanse durante lesecuzione  $ sh t.sh  SELECT TABLE_NAME FROM informat...
Il client mysql  $ mysql < filename.sql  mysql> source filename.sql                                               mysql>  ...
Il client mysql  $ application | mysql  $ echo "SELECT 1" | mysql  $ mysql -e "SELECT 1"      ‣ Esegue i comandi da "stand...
Il client mysql - batch mode  $ echo "select curdate()" | mysql  curdate()  2010-04-12      ‣ In batch mode, loutput non v...
Il client mysql - table mode  $ echo "select curdate()" | mysql -t  +------------+  | curdate() |  +------------+  | 2010-...
Il client mysql - table mode  $ mysql -e "select curdate()"  +------------+  | curdate() |  +------------+  | 2010-04-12 |...
Il client mysql - senza testata  $ mysql -N -B -e select curdate()  2010-04-12      ‣ IMPORTANTE! possiamo forzare il     ...
Comandi dentro testo  Un comando viene eseguito se inserito in virgolette inverse   Comandi fra virgolette inverse (invers...
Cicli (loops)  Se potete eseguire cicli dalla linea di comando, nulla può  resistervi      ‣ Non sono cicli da pedalare, m...
Cicli - le basi  Un ciclo semplice  $ for N in 1 2 3  > do  > echo $N  > done  1  2  3                         54Friday, O...
Cicli - le basi  Lo stesso ciclo, ma su una sola riga  $ for N in 1 2 3 ; do echo $N ; done  1  2  3                      ...
Cicli - le basi  Un ciclo può usare una lista create da un programma  $ seq 1 3  1  2  3   $ for N in $(seq 1 3) ;    do e...
Cicli da un file  Ecco una decina di righe da un !le  $ head /usr/share/dict/words  A  a  aa  aal  aalii  aam  Aani  aardva...
Cicli da un file  Usando un !le come input, il ciclo esegue unoperazione su ogni  elemento   $ for U in    $(head /usr/shar...
Allo stesso modo si usa output da mysql  Per esempio, lelenco di tabelle da un database  $ mysql -B -N -e show tables from...
Output da mysql in un ciclo  Creazione di comandi usando lelenco di tabelle  $ for T in $(mysql -B -N -e show tables from ...
usare il risultato del ciclo con MySQL  Questa e tutta la magia del ciclo:  Il risultato di mysql viene usato come input p...
Cicli annidati  Un po piu difficile. Ma questo metodo e la chiave  dellonnipotenza da sysadmin      ‣ Un ciclo dentro un ci...
Per esempio usando mysql  Vediamo la lista dei database  $ mysql -e "show databases"  +--------------------+  | Database  ...
Usando mysql  Possiamo fare qualcosa con le tabelle di un database  $ mysql -e "show tables from world"  +----------------...
In teoria  Up to a one line subtitle  per ogni database    esegui    per ogni tabella         esegui         Fai qualcosa ...
In pratica  Usando una combinazione di comandi nel testo e cicli, abbiamo  alias mybatch=mysql -B -N  for D in $(mybatch -...
Concludendo  Largomento e lungo      ‣ Potrei parlare di questo argomento per tre ore      ‣ (In effetti lho fatto alcune ...
Altri talk come questo e buone letture  Ci sono altri talk, più lunghi, che spiegano molti altri trucchi, e il  mio blog h...
ALcuni libri da considerare  Se volete considerare la linea di comando seriamente, ecco  alcune risorse                   ...
Questo conclude la mia presentazione  Troverete le slides nel sito http://slideshare.net/datacharmer  qualche ora dopo la ...
Upcoming SlideShare
Loading in...5
×

Al comando con la command line

533

Published on

Linux

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
533
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Al comando con la command line"

  1. 1. State al comando con la command line $ Giuseppe Maxia The Data Charmer QA Director, Continuent, Inc 1Friday, October 26, 12
  2. 2. Giuseppe Maxia Un po di informazioni personali ‣ Noto anche come "The Data Charmer" ‣ Direttore del controllo di qualità a Continuent, Inc ‣ Sardo cosmopolita ‣ Database hacker di lunga data ‣ Blogger (http://datacharmer.blogspot.com) ‣ Curatore di MySQL Sandbox ‣ Utente Linux dal 1993 2Friday, October 26, 12
  3. 3. Di cosa parliamo Questa sessione parla della linea di comando ‣ Strumenti e suggerimenti per bar gli utenti della linea di foo comando baz ‣ Imparare qualche trucco per scrivere meno e produrre di più ‣ Far diventare gli utenti di interfacce grafiche verdi di invidia ... 3Friday, October 26, 12
  4. 4. Definiamo il problema Quando serve usare la linea di comando ... ‣ Supponiamo che abbiate un documento • con una data nel formato "mm-gg-aaaa" • volete trasformarla in "aaaa.mm.gg" (o "gg.mm.aaaa") ‣ Utente GUI • Aprire il documento con Word (Open/LibreOffice) • Modificare la data ‣ Utente Linea di comando • Probabilmente fa lo stesso 4Friday, October 26, 12
  5. 5. Aumentiamo il problema Quando serve usare la linea di comando ... ‣ Supponiamo che abbiate un documento • con molte date nel formato "mm-gg-aaaa" • volete trasformarle in "aaaa.mm.gg" (o "gg.mm.aaaa") ‣ Utente GUI • Aprire il documento con ... uh, qualcosa • Sperare che supporti espressioni regolari ‣ Utente Linea di comando • Usa vi o emacs e risolve con un comando 5Friday, October 26, 12
  6. 6. Modificare una data con vi Questo e uno dei modi ... Il vostro testo contiene 12-25-2012 e anche 08-31-1978, e perfino 01-04-2004. Alcune righe dopo, troviamo anche 05-12-1995. :%s/(dd)-(dd)-(dddd)/3.2.1/g 6Friday, October 26, 12
  7. 7. Modificare una data con vi Questo e uno dei modi ... Il vostro testo contiene 2012.25.12 e anche 1978.31.08, e perfino 2004.04.01. Alcune righe dopo, troviamo anche 1995.12.05. 7Friday, October 26, 12
  8. 8. In effetti, potete anche usare OpenOffice ‣ Se sapete usare espressioni regolari, anche con OpenOffice o LibreOffice potete arrivare alla stessa soluzione. ‣ Siamo ancora (quasi) in parità ‣ ma ... 8Friday, October 26, 12
  9. 9. Ma il problema può farsi più interessante Quando veramente serve usare la linea di comando ... ‣ Supponiamo che abbiate molti documenti • con molte date nel formato "mm-gg-aaaa" • volete trasformarle in "aaaa.mm.gg" (o "gg.mm.aaaa") ‣ Utente GUI • ??? ‣ Utente Linea di comando • Usa sed o perl dalla linea di comando 9Friday, October 26, 12
  10. 10. Molte date da cambiare in + documenti Qui nessuno batte la command line perl -i -pe s/(dd)-(dd)-(d{4})/$3.$2.$1/g *.txt Oppure, se volete la soluzione più difficile: sed -i -E s/([0-9][0-9])-([0-9][0-9])-([0-9] [0-9][0-9][0-9])/3.2.1/g *.txt 10Friday, October 26, 12
  11. 11. Intermezzo Che diavolo sono quei segni orribili sullo schermo? ‣ Espressioni regolari (regular expressions) ‣ Un linguaggio di ricerca testuale ‣ Usato in diversi ambienti (inclusi molti editor grafici!) ‣ Diversi dialetti (come in Sardegna) ‣ Utile come linglese ‣ Difficile come il sardo (per gli italiani) ‣ Facile come il sardo (per i sardi: basta capirli!) 11Friday, October 26, 12
  12. 12. Espressioni regolari in due schermate Cercare un carattere in un testo e molto facile $ (echo "Ciao"; echo "mondo"; echo "2012") Ciao mondo 2012 $ (echo "Ciao"; echo "mondo"; echo "2012") | grep "a" Ciao $ (echo "Ciao"; echo "mondo"; echo "2012") | grep "o" Ciao mondo 12Friday, October 26, 12
  13. 13. espressioni regolari in due schermate Certi caratteri hanno un senso particolare$ (echo "Ciao"; echo "mondo"; echo "2012") | grep "w"Ciaomondo2012$ (echo "Ciao";echo "mondo"; echo "2012") | grep "[0-9]"2012$ (echo "Ciao";echo "mondo";echo "2012")|grep "[0-9a-z]"Ciaomondo2012 13Friday, October 26, 12
  14. 14. Ho barato. Ce una terza schermata Certi caratteri hanno un senso ancora piu particolare$ (echo "Ciao"; echo sei nel;echo "2012") | grep "s"sei nel$ (echo !Ciao; echo 2012!) | grep "W"!Ciao2012!$ (echo !Ciao; echo 2012!) | grep "^W"!Ciao$ (echo !Ciao; echo 2012!) | grep "W$"2012! 14Friday, October 26, 12
  15. 15. In realtà ci sarebbero altre schermate ... Ci sono tante cose da imparare! ‣ Ma la lasciamo per unaltra sessione ‣ nel frattempo, se avete perso il film, vi consiglio il libro! http://regex.info/ 15Friday, October 26, 12
  16. 16. ? ‣ Perché usare la linea di comando? 16Friday, October 26, 12
  17. 17. Una storia di apprendimento Quello che ho imparato con Microsoft diventa inutile dopo pochi anni. Quello che ho imparato con Unix e ancora valido 1985-90 • MS-DOS • Unix shell 1991 • Windows 3.0 1993 • Windows 3.1 • Linux 1994 • Windows NT 1995-97 • Windows 95 1998-99 • Windows 98 2000-2001 • Windows 2000 2001-2006 • Windows XP • Mac OSX 2007-2009 • Windows Vista 2010-2011 • Windows 7 2012- • Windows 8 17Friday, October 26, 12
  18. 18. Introduciamo la linea di comando Per principianti |||| ‣ Prima di tutto: niente panico! 18Friday, October 26, 12
  19. 19. Che cosa e il panico da command line? Quando un principiante incontra la linea di comando $_ ‣ E ora che faccio? 19Friday, October 26, 12
  20. 20. La linea di comando Un po di conoscenza e passa la paura ‣ Principi 20Friday, October 26, 12
  21. 21. La shell Il personaggio principale ‣ E un interprete di comandi ‣ Ce sono vari dialetti • bash • csh • ksh • zsh ‣ Noi ci occupiamo solo di "bash" 21Friday, October 26, 12
  22. 22. i comandi interni della shell la shell può fare molte cose senza aiuto di altri ‣ echo ‣ export ‣ alias ‣ for ‣ while ‣ test ‣ pwd ‣ ... 22Friday, October 26, 12
  23. 23. i comandi esterni E poi ci sono programmi che si trovano in tutte le macchine Unix ‣ man, ls, cd, find, grep ‣ date, mv, cp ‣ rm, mkdir, rmdir ‣ cat, sed ‣ strings, wc, head, tail ‣ more/less ‣ sort 23Friday, October 26, 12
  24. 24. E altri strumenti Per completare il quadro ‣ Shell scripts ‣ Aliases ‣ Perl Che può sostituire tutto il resto, se volete ‣ awk ‣ sort ‣ …. E un sacco di altri piccoli aiuti da Unix 24Friday, October 26, 12
  25. 25. Uno strumento che useremo E il gestore del database MySQL ‣ Si chiama "mysql" ‣ Riceve comandi SQL ‣ Li invia al server di database ‣ Riceve risultati ‣ Ma può fare molte altre cose ... 25Friday, October 26, 12
  26. 26. Se non fosse chiaro finora .. Meglio specificare ... ‣ Le azioni alla linea di comando sono: • comandi (il nome dellapplicazione da lanciare) • parametri (argomenti opzionali per il comando) • E il tasto ENTER (detto anche INVIO o RETURN) Enter 26Friday, October 26, 12
  27. 27. La filosofia di Unix (I) Che non e uno stile di vita, ma un modo efficiente di lavorare ‣ Uno strumento per ogni funzionalità • Crea uno strumento che fa bene una cosa • Per fare molte cose, crea molti strumenti • Falli lavorare insieme (vedi la prossima slide) 27Friday, October 26, 12
  28. 28. La filosofia di Unix (II) E un po come "Usa la forza!" ma funziona! ‣ Per far cooperare diversi strumenti: • Attacca luscita di uno strumento allingresso di un altro. • Per avere più azioni, attacca più strumenti. $ sort < filename | uniq | nl 28Friday, October 26, 12
  29. 29. Unix pipes (flussi applicativi) Lingresso e luscita di unapplicazione possono essere diretti a unaltra application < input application > output application < input > output application | application output input 29Friday, October 26, 12
  30. 30. Unix pipes = elaborazione parallela Non si deve aspettare che la prima applicazione abbia finito per cominciare a elaborare la seconda application | application output input 30Friday, October 26, 12
  31. 31. Dove vanno i vostri comandi I comandi inseriti alla tastiera possono andare a finire in diverse applicazioni shell prompt $ mysql mysql client mysql server 23 31Friday, October 26, 12
  32. 32. Dove sono i destinatari Il comando inserito al terminale talvolta viaggia lontano any host mysql server shell mysql client 32Friday, October 26, 12
  33. 33. Chi riceve che cosa Vediamo alcuni casi $ mysql -u username -ppassword Prima lapplicazione, poi il server 33Friday, October 26, 12
  34. 34. Chi riceve che cosa Vediamo alcuni casi $ mysql -u username -ppassword -e "select VERSION()" Va prima al client mysql, poi al server Va al server 34Friday, October 26, 12
  35. 35. Chi riceve che cosa Vediamo alcuni casi mysql> help mysql> pager less goes to theclient (comandi Va solo al client only interni) mysql> select 1; va al server 35Friday, October 26, 12
  36. 36. La linea di comando Un componente importante ma poco noto ‣ READLINE • Componente comune • nella shell • nel client mysql • in molti programmi Unix 36Friday, October 26, 12
  37. 37. readline (1) Ci sono combinazioni di tasti che salvano la vita Ctrl A Inizio, fine della riga Ctrl E Meta B Indietro/Avanti di una parola Meta F Comando precedente/ seguente Ctrl L Cancella lo schermo e porta il cursore in alto Ctrl R Cerca comandi precedenti 37Friday, October 26, 12
  38. 38. readline (2) Per cambiare il testo Meta U Trasforma parola in MAIUSCOLO Meta L Trasforma parola in minuscolo Ctrl D Cancella parola Ctrl K Cancella fino alla fine della riga Ctrl - Elimina ultima azione Altri consigli: $ man readline 38Friday, October 26, 12
  39. 39. bash Il primo attore ‣ Componenti: • • • comandi alias variables #! • functions 39Friday, October 26, 12
  40. 40. Comandi Sono i comandi interni ed esterni $ echo "something" something 40Friday, October 26, 12
  41. 41. Alias Creazione di nuovi comandi al volo $ alias mydate=mysql -e "select NOW()" $ mydate +---------------------+ | now() | +---------------------+ | 2010-04-12 07:14:19 | +---------------------+ 41Friday, October 26, 12
  42. 42. Alias Un alias si può usare dentro un altro alias $ alias myself=mysql $ myself -e "select NOW()" +---------------------+ | now() | +---------------------+ | 2010-04-12 07:14:19 | +---------------------+ 42Friday, October 26, 12
  43. 43. Variables Valori che sostituiscono testo $ MYBATCH=mysql -N -B $ MYQUERY=select curdate() $ $MYBATCH -e "$MYQUERY" 2010-04-12 43Friday, October 26, 12
  44. 44. Variabili annidate Una dentro laltra! # t.sh CMD="SELECT TABLE_NAME" TBL=information_schema.tables WHC1="TABLE_SCHEMA=mysql" WHC2="TABLE_NAME like u% " Q1="$CMD FROM $TBL" Q2="WHERE $WHC1 AND $WHC2" Q="$Q1 $Q2" echo $Q echo $Q | mysql 44Friday, October 26, 12
  45. 45. Uso delle variabili annidate Le variabili vengono espanse durante lesecuzione $ sh t.sh SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_SCHEMA=mysql AND TABLE_NAME like u% TABLE_NAME user 45Friday, October 26, 12
  46. 46. Il client mysql $ mysql < filename.sql mysql> source filename.sql mysql> ‣ Esegue i comandi contenuti in filename.sql ‣ I comandi possono essere query che vengono mandate al server ‣ e comandi che solo il client capisce 46Friday, October 26, 12
  47. 47. Il client mysql $ application | mysql $ echo "SELECT 1" | mysql $ mysql -e "SELECT 1" ‣ Esegue i comandi da "standard input" ‣ I comandi possono essere query che vengono mandate al server ‣ e comandi che solo il client capisce 47Friday, October 26, 12
  48. 48. Il client mysql - batch mode $ echo "select curdate()" | mysql curdate() 2010-04-12 ‣ In batch mode, loutput non viene abbellito 48Friday, October 26, 12
  49. 49. Il client mysql - table mode $ echo "select curdate()" | mysql -t +------------+ | curdate() | +------------+ | 2010-04-12 | +------------+ ‣ In table mode, loutput viene abbellito 49Friday, October 26, 12
  50. 50. Il client mysql - table mode $ mysql -e "select curdate()" +------------+ | curdate() | +------------+ | 2010-04-12 | +------------+ ‣ Table mode viene inteso automaticamente quando il comando e passato con il parametro "-e" 50Friday, October 26, 12
  51. 51. Il client mysql - senza testata $ mysql -N -B -e select curdate() 2010-04-12 ‣ IMPORTANTE! possiamo forzare il batch mode (-B) e allo stesso tempo eliminare i nomi di colonne (-N) ‣ Questo ci serve per costruire comandi complessi 51Friday, October 26, 12
  52. 52. Comandi dentro testo Un comando viene eseguito se inserito in virgolette inverse Comandi fra virgolette inverse (inverse quotes) ( `` ) Oppure usando $() $ echo "The current servers date is `mysql -N -B -e select curdate()`." $ echo "The current servers date is $(mysql -N -B -e select curdate())." 52Friday, October 26, 12
  53. 53. Cicli (loops) Se potete eseguire cicli dalla linea di comando, nulla può resistervi ‣ Non sono cicli da pedalare, ma da eseguire 53Friday, October 26, 12
  54. 54. Cicli - le basi Un ciclo semplice $ for N in 1 2 3 > do > echo $N > done 1 2 3 54Friday, October 26, 12
  55. 55. Cicli - le basi Lo stesso ciclo, ma su una sola riga $ for N in 1 2 3 ; do echo $N ; done 1 2 3 55Friday, October 26, 12
  56. 56. Cicli - le basi Un ciclo può usare una lista create da un programma $ seq 1 3 1 2 3 $ for N in $(seq 1 3) ; do echo "this is number $N" ; done this is number 1 this is number 2 this is number 3 56Friday, October 26, 12
  57. 57. Cicli da un file Ecco una decina di righe da un !le $ head /usr/share/dict/words A a aa aal aalii aam Aani aardvark aardwolf 57Friday, October 26, 12
  58. 58. Cicli da un file Usando un !le come input, il ciclo esegue unoperazione su ogni elemento $ for U in $(head /usr/share/dict/words ) ; do perl -le print uc shift $U ; done A A AA AAL AALII AAM AANI 58Friday, October 26, 12
  59. 59. Allo stesso modo si usa output da mysql Per esempio, lelenco di tabelle da un database $ mysql -B -N -e show tables from world City Country CountryLanguage 59Friday, October 26, 12
  60. 60. Output da mysql in un ciclo Creazione di comandi usando lelenco di tabelle $ for T in $(mysql -B -N -e show tables from world) ; > do echo "CREATE TABLE world2.$T LIKE world.$T;" ; done CREATE TABLE world2.City LIKE world.City; CREATE TABLE world2.Country LIKE world.Country; CREATE TABLE world2.CountryLanguage LIKE world.CountryLanguage; 60Friday, October 26, 12
  61. 61. usare il risultato del ciclo con MySQL Questa e tutta la magia del ciclo: Il risultato di mysql viene usato come input per il ciclo; Il ciclo produce comandi SQL; Il risultato del ciclo (comandi SQL) viene reindirizzato a mysql stesso, che cosi facendo esegue i comandi $ for T in $(mysql -B -N -e show tables from world) ; > do echo "CREATE TABLE world2.$T LIKE world.$T;" ; done > | mysql -vv 61Friday, October 26, 12
  62. 62. Cicli annidati Un po piu difficile. Ma questo metodo e la chiave dellonnipotenza da sysadmin ‣ Un ciclo dentro un ciclo 62Friday, October 26, 12
  63. 63. Per esempio usando mysql Vediamo la lista dei database $ mysql -e "show databases" +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | sakila | | world | +--------------------+ 63Friday, October 26, 12
  64. 64. Usando mysql Possiamo fare qualcosa con le tabelle di un database $ mysql -e "show tables from world" +-----------------+ | Tables_in_world | +-----------------+ | City | | Country | | CountryLanguage | +-----------------+ 64Friday, October 26, 12
  65. 65. In teoria Up to a one line subtitle per ogni database esegui per ogni tabella esegui Fai qualcosa con la tabella corrente del database corrente 65Friday, October 26, 12
  66. 66. In pratica Usando una combinazione di comandi nel testo e cicli, abbiamo alias mybatch=mysql -B -N for D in $(mybatch -e "SHOW SCHEMAS") do for T in $(mybatch -e "SHOW TABLES FROM $D") do echo "SHOW CREATE TABLE $D.$T;" done done 66Friday, October 26, 12
  67. 67. Concludendo Largomento e lungo ‣ Potrei parlare di questo argomento per tre ore ‣ (In effetti lho fatto alcune volte) ‣ Ma oggi, con soli 40 minuti, non possiamo ‣ Quindi vi lascio un elenco di letture 67Friday, October 26, 12
  68. 68. Altri talk come questo e buone letture Ci sono altri talk, più lunghi, che spiegano molti altri trucchi, e il mio blog ha riferimenti ad argomenti simili ‣ http://slideshare.net/datacharmer ‣ http://datacharmer.blogspot.com 68Friday, October 26, 12
  69. 69. ALcuni libri da considerare Se volete considerare la linea di comando seriamente, ecco alcune risorse 69Friday, October 26, 12
  70. 70. Questo conclude la mia presentazione Troverete le slides nel sito http://slideshare.net/datacharmer qualche ora dopo la presentazione Grazie per lattenzione 70Friday, October 26, 12
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×