Your SlideShare is downloading. ×
0
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Shell unix
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Shell unix

168

Published on

Introduzione ai principali comandi e alla scrittura di script della shell (con particolare riferimento a bash e ksh)

Introduzione ai principali comandi e alla scrittura di script della shell (con particolare riferimento a bash e ksh)

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
168
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Shell UnixIntroduzione ai principali comandi e allascrittura di script della shell(con particolare riferimento a bash e ksh)Paolo Montalto set-2010Paolo Montalto set-2010http://www.xabaras.ithttp://www.xabaras.itv2.0
  • 2. Un po di storiash: alias "Bourne" shellsh: alias "Bourne" shellscritta da Steve Bourne degli AT&T Bell Labs per Unix V7 (1979)scritta da Steve Bourne degli AT&T Bell Labs per Unix V7 (1979)Semplice, e dotata (inizialmente) di pochissimi comandi interni, infatti chiamava programmi esternianche perSemplice, e dotata (inizialmente) di pochissimi comandi interni, infatti chiamava programmi esternianche peri task più semplici.i task più semplici.csh: ”C" shellcsh: ”C" shellsviluppata da Bill Joy (inventore dell editor VI) per il sistema BSDsviluppata da Bill Joy (inventore dell editor VI) per il sistema BSDSimile alla Bourne shell ma con molti miglioramenti tesi allinterattività (es. history), i comandi usati negliSimile alla Bourne shell ma con molti miglioramenti tesi allinterattività (es. history), i comandi usati negliscript sono molto simili alle istruzioni del linguaggio C.script sono molto simili alle istruzioni del linguaggio C.tcsh: ”TC” shelltcsh: ”TC” shellsviluppata alla fine degli anni 70 da Ken Greer alla Carnegie Mellon University per il sistema ”TENEX”sviluppata alla fine degli anni 70 da Ken Greer alla Carnegie Mellon University per il sistema ”TENEX”è unestensione (completamente compatibile) della C shell che supporta il completamento automatico deiè unestensione (completamente compatibile) della C shell che supporta il completamento automatico deicomandi e lediting a linea di comando.comandi e lediting a linea di comando.ksh: ”Korn” shellksh: ”Korn” shellscritta da David Korn agli AT&T Bell Labs allinizio degli anni 80scritta da David Korn agli AT&T Bell Labs allinizio degli anni 80considerata come unupdate della Bourne shell, è compatibile con questultima ma incorpora anche molteconsiderata come unupdate della Bourne shell, è compatibile con questultima ma incorpora anche moltecaratteristiche di interattività della tcshell.caratteristiche di interattività della tcshell.bash: ”Bourne again” shellbash: ”Bourne again” shellshell UNIX Open Source scritta dal progetto GNU (Default su Linux)shell UNIX Open Source scritta dal progetto GNU (Default su Linux)è un clone della sh ma con estensione dellinsieme di comandi, conforme allo standard POSIX eè un clone della sh ma con estensione dellinsieme di comandi, conforme allo standard POSIX eparzialmente compatibile con la Korn shell.parzialmente compatibile con la Korn shell.Shell Unix
  • 3. Principali comandi di shell 1/2ls: mostra il contenuto delle Directoryls: mostra il contenuto delle Directory-l-l elenca un file per lineaelenca un file per linea-a-a mostra i file nascostmostra i file nascostii-t-t ordina per data ultima modificaordina per data ultima modificacd: ”cambia directory”cd: ”cambia directory”rm: cancella file e directoryrm: cancella file e directory-R-R (ricorsivo) elimina anche le sottocartelle(ricorsivo) elimina anche le sottocartelle-f-f forza la cancellazione senza chiedere confermaforza la cancellazione senza chiedere confermamv: sposta file e directorymv: sposta file e directorypwd: stampa la directory correntepwd: stampa la directory correntehistory:history: mostra lelenco dei comandi eseguidi dalla shellmostra lelenco dei comandi eseguidi dalla shellmore:more: mette in pausa lo standard output consentendo di leggerlo, solitamente è usato in concomitanza conmette in pausa lo standard output consentendo di leggerlo, solitamente è usato in concomitanza conloperatore ”|” (che vedremo più avanti)loperatore ”|” (che vedremo più avanti)tail:tail: mostra le ultime righe di un filemostra le ultime righe di un file-n-n mostra le ultime ”n” righemostra le ultime ”n” righe-f-f continua a rileggere il file nel caso vinga modificatocontinua a rileggere il file nel caso vinga modificatocat:cat: stampa uno o più file sullo standard outputstampa uno o più file sullo standard outputShell Unix
  • 4. Principali comandi di shell 2/2ln: crea un link ad un fileln: crea un link ad un fileln [OPZIONE] DEST NOME_COLLln [OPZIONE] DEST NOME_COLL-s-s crea un link simbolicocrea un link simbolicowho:who: elenca gli utente attualmente loggati nel sistemaelenca gli utente attualmente loggati nel sistemaw:w: come ”who” ma aggiunge informazioni su cosa stanno eseguendocome ”who” ma aggiunge informazioni su cosa stanno eseguendoecho:echo: stampa una stringa e/o il valore di una variabile sullo standard outputstampa una stringa e/o il valore di una variabile sullo standard outputwhich / whence:which / whence: trova il path corrispondete ad un comando, es:trova il path corrispondete ad un comando, es:# which# which lsls/bin/ls/bin/lssort:sort: ordina le righe di un file di testoordina le righe di un file di testotouch:touch: cambia la data di modifica di un filecambia la data di modifica di un filewc:wc: conta le parole presenti in un file di testoconta le parole presenti in un file di testofind:find: cerca un file nel percorso specificato come parametrocerca un file nel percorso specificato come parametro-name-name cerca i file per nomecerca i file per nome-exec-exec esegue un comando sui file trovatiesegue un comando sui file trovatikill:kill: invia un segnale ad un processo (generalmente usato per terminare un programma)invia un segnale ad un processo (generalmente usato per terminare un programma)es.es. killkill -9 61435-9 61435Shell Unix
  • 5. Reindirizzamento 1/2Ogni programma eseguito dalla shell accede a tre file specialiOgni programma eseguito dalla shell accede a tre file specialiStandard input (per convenzione descrittore di file numeroStandard input (per convenzione descrittore di file numero 00))Standard output per convenzione descrittore di file numeroStandard output per convenzione descrittore di file numero 11))Standard error (per convenzione descrittore di file numeroStandard error (per convenzione descrittore di file numero 22))ciascuno di questi file può essere oggetto di ”reindirizzamento”.ciascuno di questi file può essere oggetto di ”reindirizzamento”.Cerchiamo di essere più chiari.Cerchiamo di essere più chiari.Supponiamo di lanciare il comando ”ls” nella directory corrente, questo scriverà una lista di file e directorySupponiamo di lanciare il comando ”ls” nella directory corrente, questo scriverà una lista di file e directorysullo schermo.sullo schermo.E se invece volessimo scrivere il risultato di ”ls” su un file risultato.txt?E se invece volessimo scrivere il risultato di ”ls” su un file risultato.txt?Detto fatto!Detto fatto!Basterà utilizzare loperatore ”>” che ”devia” lo standard output di ”ls” su un file:Basterà utilizzare loperatore ”>” che ”devia” lo standard output di ”ls” su un file:ls > risultato.txtls > risultato.txtoppureoppurels >> risultato.txtls >> risultato.txtse vogliamo mantenere il contenuto preesistende del filese vogliamo mantenere il contenuto preesistende del fileShell Unix
  • 6. Reindirizzamento 2/2Per deviare lo standard error di un comando su file basta anteporre un 2 alloperatore:Per deviare lo standard error di un comando su file basta anteporre un 2 alloperatore:comando 2> errore.txtcomando 2> errore.txtPer deviare lo standard error sullo standard output lanciare:Per deviare lo standard error sullo standard output lanciare:comando 2>&1comando 2>&1dove ”&1” identifica lo standard output.dove ”&1” identifica lo standard output.Inoltre è possibile leggere linput di un comando da file in questo modo:Inoltre è possibile leggere linput di un comando da file in questo modo:comando < input.txtcomando < input.txto combinare i due tipi di reindirizzamento come di seguito:o combinare i due tipi di reindirizzamento come di seguito:comando < input.txt > output.txtcomando < input.txt > output.txtInfine ogni comando di shell può leggere il suo input da una lista testuale come questa:Infine ogni comando di shell può leggere il suo input da una lista testuale come questa:comando <<[delimitatore]comando <<[delimitatore]input1.txtinput1.txtinput2.txtinput2.txtdelimitatoredelimitatoredove il primo ”delimitarore” indica il carattere che termina la lista (per default è EOF).dove il primo ”delimitarore” indica il carattere che termina la lista (per default è EOF).Shell Unix
  • 7. Pipeline di comandiE possibile eseguire comandi multipli in modo che loutput di un comando diventi linput di quello successivoE possibile eseguire comandi multipli in modo che loutput di un comando diventi linput di quello successivoin modo automatico.in modo automatico.Ciò può essere fatto mediante loperatore ”|” detto ”pipe” il quale collega in serie gli input/output dei variCiò può essere fatto mediante loperatore ”|” detto ”pipe” il quale collega in serie gli input/output dei varicomandi che compongono la pipeline nel modo seguente:comandi che compongono la pipeline nel modo seguente:comando1 | comando2 [ | comando3 …]comando1 | comando2 [ | comando3 …]Luso delle pipeline è molto comune quando si utilizza una shell Unix, ecco alcuni esempi:Luso delle pipeline è molto comune quando si utilizza una shell Unix, ecco alcuni esempi:ls | morels | more esegue il comando ls e passa il suo output al comando more paginando di fatto la listaesegue il comando ls e passa il suo output al comando more paginando di fatto la listacat applicazione.log | morecat applicazione.log | more visualizza il contenuto del file di log una shermata alla voltavisualizza il contenuto del file di log una shermata alla voltals | grep ”foto”ls | grep ”foto” visualizza solo i file che contengono ”foto” nel nomevisualizza solo i file che contengono ”foto” nel nomeShell Unix
  • 8. sed – Stream Editor 1/2Uno stream editor serve ad effettuare trasformazioni su uno stream (che si esso un file o una pipeline)Uno stream editor serve ad effettuare trasformazioni su uno stream (che si esso un file o una pipeline)Ciò può essere molto utile, ad esempio, se si vogliono effettuare delle sostituzioni massive allinterno di unCiò può essere molto utile, ad esempio, se si vogliono effettuare delle sostituzioni massive allinterno di unfile.file.Es: sostituiamo tutte le occorrenze della parola ”giorno” con la parola ”notte” nel file pippo.txt:Es: sostituiamo tutte le occorrenze della parola ”giorno” con la parola ”notte” nel file pippo.txt:sed s/giorno/notte/ < pippo.txt > output.txtsed s/giorno/notte/ < pippo.txt > output.txtil risultato della sostituzione viene memorizzato nel file output.txtil risultato della sostituzione viene memorizzato nel file output.txtCerchiamo ora di analizzare lesempio descritto.Cerchiamo ora di analizzare lesempio descritto.Il comando è cotituito da quattro parti:Il comando è cotituito da quattro parti:ss comando ”sostituisci”comando ”sostituisci”/../..//../../ delimitatoredelimitatoregiornogiorno criterio di ricerca (pattern, è unespressione regolare)criterio di ricerca (pattern, è unespressione regolare)nottenotte stringa da sostituirestringa da sostituirePoiché lavora sugli stream, ”sed” può essere eseguito anche sulle pipeline, ad esempio:Poiché lavora sugli stream, ”sed” può essere eseguito anche sulle pipeline, ad esempio:echo Buongiorno | sed s/giorno/notte/echo Buongiorno | sed s/giorno/notte/Il cui risultato sarà la stringa ”Buonnotte”.Il cui risultato sarà la stringa ”Buonnotte”.Shell Unix
  • 9. sed – Stream Editor 2/2Quello appena mostrato è solo un esempio delle potenzialità di sed.Quello appena mostrato è solo un esempio delle potenzialità di sed.E ad esempio possibile:E ad esempio possibile:cercare una stringa ed aggiungervi un prefisso e/o un suffissocercare una stringa ed aggiungervi un prefisso e/o un suffissosostituire soltanto una parte della stringa cercatasostituire soltanto una parte della stringa cercata------Supponiamo di avere un articolo con dei riferimenti alle figure inserite al suo interno (Figura 1, Figura 2,Supponiamo di avere un articolo con dei riferimenti alle figure inserite al suo interno (Figura 1, Figura 2,Figura 3) e di voler aggiungere le parentesi intorno alla dicitura Figura n.Figura 3) e di voler aggiungere le parentesi intorno alla dicitura Figura n.Non potremo usare il metodo precedentemente descritto, poiché non conosciamo la stringa esatta daNon potremo usare il metodo precedentemente descritto, poiché non conosciamo la stringa esatta dacercare.cercare.La soluzione è semplice, sed prevede un carattere speciale che possiamo usare per indicare la stringaLa soluzione è semplice, sed prevede un carattere speciale che possiamo usare per indicare la stringatrovata, questo carattere e la &.trovata, questo carattere e la &.Supponendo che il nostro testo sia ”La casa di Pippo Figura 1”, lanciando il seguente comando:Supponendo che il nostro testo sia ”La casa di Pippo Figura 1”, lanciando il seguente comando:echo "La casa di pippo Figura 1" | sed s/Figura [0-9]*/(&)/echo "La casa di pippo Figura 1" | sed s/Figura [0-9]*/(&)/otterremo la stringa:otterremo la stringa:La casa di Pippo (Figura 1)La casa di Pippo (Figura 1)Dove il criterio di ricerca ”Figura [0-9]*” indica la parola Figura seguita da uno spazio e da numero arbitrarioDove il criterio di ricerca ”Figura [0-9]*” indica la parola Figura seguita da uno spazio e da numero arbitrariodi cifre.di cifre.Shell Unix
  • 10. grep 1/2General regular expression print o semplicemente ”grep” può rivelarsi un comando molto ultile a chiunque sitrovi a dover utilizzare una shell unix.Sostanzialmente il comando ”grep” cerca nel file di input le righe che corrispondono ad un certo criterio e lestampa.Partendo da questo semplice concetto è possibile ad esempio cercare tutti i file che contengono unadeterminata stringa o tutte le righe di un file che soddisfano una condizione.Tale condizione è esprimibile come ”espressione regolare”. Ricollegandoci allesempio fatto per ”sed”, supponiamo di voler cercare tutte le righe del file pippo.txt checontengono il riferimento ad una Figura.Ci basterà lanciare il seguente comando grep:grep ”Figura [0-9]*Figura [0-9]*” pippo.txtche stampa tutte le righe di pippo.txt che soddisfano il criterio.Il comando così eseguito però non da informazioni sulla posizione delle righe nel file, inoltre il criterio diricerca è ”case sensitive”.Modificando il comando in questo modo:grep -in ”Figura [0-9]*Figura [0-9]*” pippo.txtgrep stamperà ogni riga preceduta dalla sua posizione nel file.Nellesempio appena descritto il parametro -i sta per ”ignore case” e -n per ”line number”.Shell Unix
  • 11. grep 2/2Anche grep può essere usato sulle pipeline ed è quindi molto utile per filtrare i risultati di altri comandi qualiad esempio cat cat Catalina.out | grep myApp.waroppure ls ls -l | grep -i ”Figura[0-9]*”Principali opzioni di grep:-i ignore case (non distingue tra minuscole e maiuscole)-v invert match (seleziona le righe che non soddisfano la condizione)-n visualizza numeri di riga-w parola intera (Forza MODELLO a corrispondere solo a parole intere)-x linea intera (Forza MODELLO a corrispondere solo a righe intere)Shell Unix
  • 12. Sudo (1/2)Super User Do o semplicemente ”sudo” non è un comando di shell, ma un programma a se stante checonsente ad un utente abilitato di eseguire un comando come superutente o come un altro utente.Normalmente i permessi e vincoli per lesecuzione di sudo si trovano nel file /etc/sudoers che viene compilatodallamministratore di sistema.La sintassi di sudo è la seguente: sudo [opzioni] [variabile1=valore1 …] [--] [comando [arg1 …]]dove Il parametro facoltativo comando indica il comando da eseguire, ed i parametri arg sono i suoiparametri.Inolte è possibile associare delle variabili dambiente allesecuzione del comando facendolo precedere daparametri nella forma variabile=valore.Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni oassegnazioni di variabili. Pricipali opzioni di sudo:-u assume lidentità dellutente specificato invece che di superuser-l elenca i comandi che lutente è abilitato a lanciare-s lancia una shell come superutenteShell Unix
  • 13. Sudo (2/2) Una menzione particolare merita lutilizzo di sudo in concomitanza con gli operatori di redirezione.Supponiamo di voler eseguire come superutente il seguente comando: echo "1" > /proc/sys/net/ipv4/ip_forwardLa sintassi più intuitiva sarebbe la seguente: sudo echo "1" > /proc/sys/net/ipv4/ip_forwardperò, sfortunatamente non è quella corretta, poiché stiamo dicendo alla shell di eseguire echo ”1” comesuperutente e la redirezione come utente normale.La soluzione corretta è invece la seguente: sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"In questo modo si esegue come superutente una shell che lancia il comando echo 1 > /proc/sys/net/ipv4/ip_forwardShell Unix
  • 14. Script della shellUno script della shell è un file di testo contenente:Uno script della shell è un file di testo contenente:comandi di shell così come potrebbero essere scritti nel promptcomandi di shell così come potrebbero essere scritti nel promptcommenti (identificati dal simbolo # come primo carattere della riga)commenti (identificati dal simbolo # come primo carattere della riga)costrutti di controllo e variabilicostrutti di controllo e variabiliQualsiasi shell può essere utilizzata per eseguire uno script, per questo è fondamentale che nella prima rigaQualsiasi shell può essere utilizzata per eseguire uno script, per questo è fondamentale che nella prima rigadello script sia specificato a quale shell è destinato per evitare errori di interpretazione.dello script sia specificato a quale shell è destinato per evitare errori di interpretazione.Ciò può essere fatto mediante la seguente sintassi:Ciò può essere fatto mediante la seguente sintassi:#!/percorso/della/shell#!/percorso/della/shellad esempioad esempio #!/bin/ksh#!/bin/kshA questo punto il file può essere eseguito passandolo alla shell in questo modo:A questo punto il file può essere eseguito passandolo alla shell in questo modo:ksh mioscript.shksh mioscript.sho direttamente aggiungendo i permessi di esecuzione al file:o direttamente aggiungendo i permessi di esecuzione al file:chmod +x mioscript.shchmod +x mioscript.shShell Unix
  • 15. Parametri a riga di comandoUno script della shell può accettare parametri a riga di comando.Uno script della shell può accettare parametri a riga di comando.Questi parametri possono essere accedutiQuesti parametri possono essere accedutiin maniera posizionale attraverso le variabili $0, $1, $2, $3, $4... fino a $9in maniera posizionale attraverso le variabili $0, $1, $2, $3, $4... fino a $9(dove $0 contiene il nome dello script)(dove $0 contiene il nome dello script)Per accedere ai parametri successivi al 9 è possibile usarePer accedere ai parametri successivi al 9 è possibile usare${10}, ${11} …${10}, ${11} …Il costrutto ”shift n” che scarta i primi n argomenti e ri-numera i successiviIl costrutto ”shift n” che scarta i primi n argomenti e ri-numera i successivi$* che contiene tutti gli argomenti separati da spazi in una sola stringa$* che contiene tutti gli argomenti separati da spazi in una sola stringa$@ che contiene tutti gli argomenti tra virgolette e separati da spazi$@ che contiene tutti gli argomenti tra virgolette e separati da spaziSe ad esempio gli argomenti sonoSe ad esempio gli argomenti sono a1 a2 "a3 con spazi" a4a1 a2 "a3 con spazi" a4 alloraallora$1=a1, $2=a2, $3=a3 con spazi, $4=a4$1=a1, $2=a2, $3=a3 con spazi, $4=a4$*=a1 a2 a3 con spazi a4$*=a1 a2 a3 con spazi a4””$@"="a1" "a2" "a3 con spazi" "a4"$@"="a1" "a2" "a3 con spazi" "a4"$#$# contiene il numero di argomenti passati (escluso $0).contiene il numero di argomenti passati (escluso $0).Shell Unix
  • 16. VariabiliPer creare una variabile è sufficiente assegnarle un valore:Per creare una variabile è sufficiente assegnarle un valore:nome=”Paolo”nome=”Paolo”eta=30eta=30Invece quando si usa una variabile la sitassi cambia ed è necessario anteporre al nome della variabile ilInvece quando si usa una variabile la sitassi cambia ed è necessario anteporre al nome della variabile ilsimbolo $, ad esempio:simbolo $, ad esempio:echo $nameecho $nameE anche possibile fare uso di array che possono essere dichiarati inizializzandone gli elementi:E anche possibile fare uso di array che possono essere dichiarati inizializzandone gli elementi:nomi[0]=Marionomi[0]=Marionomi[1]=Marconomi[1]=MarcoInoltre:Inoltre:${nomi[*]}${nomi[*]} ritorna tutti gli elementi dellarrayritorna tutti gli elementi dellarray${#nomi[*]}${#nomi[*]} ritorna il numero di elementi dellarrayritorna il numero di elementi dellarrayShell Unix
  • 17. Input/OutputGli scipt della shell possono scrivere sullo standard output e leggere dati direttamente nelle variabili.Gli scipt della shell possono scrivere sullo standard output e leggere dati direttamente nelle variabili.Esistono due funzioni di output:Esistono due funzioni di output:echoecho stampa gli argomenti separati da spazi e terminati da newline sullo standard outputstampa gli argomenti separati da spazi e terminati da newline sullo standard output(supporta le convenzioni escape del linguaggio C: n, t, …)(supporta le convenzioni escape del linguaggio C: n, t, …)-n-n sopprime i caratteri newlinesopprime i caratteri newlineprintprint (nativa della Korn shell) stampa gli argomenti separati da spazi e terminati da newline sullo(nativa della Korn shell) stampa gli argomenti separati da spazi e terminati da newline sullostandard outputstandard output-n-n sopprime i caratteri newlinesopprime i caratteri newline-r-r raw mode – ignora le convenzioni -escaperaw mode – ignora le convenzioni -escape-R-R raw mode – ignora le convenzioni -escape e le altre opzioni (tranne -n)raw mode – ignora le convenzioni -escape e le altre opzioni (tranne -n)Per la lettura dallo standard input è possibile usare la funzionePer la lettura dallo standard input è possibile usare la funzionereadread var1 var2 var3 …var1 var2 var3 …che legge una riga dalla standard input ed inserisce le stringhe separate da spazi nelle relative variabili.che legge una riga dalla standard input ed inserisce le stringhe separate da spazi nelle relative variabili.Shell Unix
  • 18. ConfrontiShell UnixLa maggior parte dei costrutti per il controllo di flusso richiedono lutilizzo di test e confronti.La maggior parte dei costrutti per il controllo di flusso richiedono lutilizzo di test e confronti.I confronti possono essere effettuati mediante:I confronti possono essere effettuati mediante:il comandoil comando testtesttesttest $nome=”Paolo”$nome=”Paolo”o i suoi equivalentio i suoi equivalenti […][…] ee [[…]][[…]] (per bash e ksh)(per bash e ksh)[[ $nome=”Paolo”$nome=”Paolo” ]] [[[[ $nome=”Paolo”$nome=”Paolo” ]]]]i confronti tra stringhe si effettuano mediantei confronti tra stringhe si effettuano mediante== con ovvio significatocon ovvio significato!=!= per diversoper diverso<< per minoreper minore>> per maggioreper maggioreI confronti tra numeri si effettiano nel seguente modo:I confronti tra numeri si effettiano nel seguente modo:-eq-eq per ugualeper uguale-ne-ne per diversoper diverso-lt-lt per minoreper minore-gt-gt per maggioreper maggioreTutte le condizioni possono essere combinate con && (indica lAND) e || (indica lOR)Tutte le condizioni possono essere combinate con && (indica lAND) e || (indica lOR)
  • 19. Controllo di flusso 1/3Shell UnixInfine ci sono tutta una serie di costrutti per il controllo di flusso, condizioni di branch e loop.Infine ci sono tutta una serie di costrutti per il controllo di flusso, condizioni di branch e loop.Vediamone rapidamente la sintassi:Vediamone rapidamente la sintassi:if then else fiif then else fiif [[ $value -eq 7 ]]if [[ $value -eq 7 ]]thenthenprint ”il valore è 7”print ”il valore è 7”elseelseprint ”il valore è diverso da 7”print ”il valore è diverso da 7”fifiif then elif then else fiif then elif then else fiif [[ $nome = "Paolo" ]]; thenif [[ $nome = "Paolo" ]]; thenprint "Benvenuto, ${nome}."print "Benvenuto, ${nome}."elif [[ $nome = "Luca" ]];thenelif [[ $nome = "Luca" ]];thenprint "Ciao, ${nome}, come va?"print "Ciao, ${nome}, come va?"elseelseprint "Arrivederci, ${nome}!"print "Arrivederci, ${nome}!"fifiN.B. Un comando può essere terminato andando a capo oppure con ”;”N.B. Un comando può essere terminato andando a capo oppure con ”;”
  • 20. Controllo di flusso 2/3Shell Unixcase esaccase esaccase $var incase $var inPaolo|Luca) print ”Invitato”;;Paolo|Luca) print ”Invitato”;;Mario) print ”Non invitato”;;Mario) print ”Non invitato”;;*) print "Sconosciuto";;*) print "Sconosciuto";;esacesacwhile do donewhile do donewhile [[ $count -gt 0 ]]; dowhile [[ $count -gt 0 ]]; doprint "$count è $count"print "$count è $count"(( count -= 1 ))(( count -= 1 ))donedoneuntil do doneuntil do doneuntil [[ $risposta = "si" ]];dountil [[ $risposta = "si" ]];doprint -n "Inserisci "si": "print -n "Inserisci "si": "read rispostaread rispostaprint "”print "”donedone
  • 21. Controllo di flusso 3/3Shell Unixfor var in list do donefor var in list do donefor foo in $(ls);dofor foo in $(ls);doif [[ -d $f ]];thenif [[ -d $f ]];thenprint "$f è una directory"print "$f è una directory"elseelseprint "$f non è una directory"print "$f non è una directory"fifidonedoneE possibile saltare uniterazione in un ciclo usando il comando ”continue”E possibile saltare uniterazione in un ciclo usando il comando ”continue”E possibile uscire da un ramo di uno dei costrutti di branch usando il comando ”break”E possibile uscire da un ramo di uno dei costrutti di branch usando il comando ”break”
  • 22. Bibliografia Unix shell scripting with ksh/bashhttp://www.dartmouth.edu/~rc/classes/ksh/print_pages.shtml Unix KornShell Quick Reference - Most Usual Commandshttp://freecomputerbooks.com/kornShell.html#Most usual commands Sed – An Introduction and tutorialhttp://www.grymoire.com/Unix/Sed.html Grephttp://www.grymoire.com/Unix/Grep.htmlShell Unix

×