Home

La guida di Bash per i principianti

image

Contents

1. SHELL bin bash SHELL LOGIN login SHLVL 2 SSH_AGENT_PID 22161 SSH_ASKPASS usr libexec openssh gnome ssh askpass SSH_AUTH_SOCK tmp ssh XXmh04fC agent 22106 START_WM twm ERM xterm MEDE USERNAME franky USER franky _ usr bin printenv VISUAL vi WINDOWID 20971661 XAPPLRESDIR nethome franky app defaults XAUTHORITY nethome franky Xauthority ENVIRONMENT nethome franky Xdefaults FILESEARCHPATH usr X11R6 lib X11 L T 5N C S usr X11R6 lib X11 51 5T NSC S usr X11R6 lib X11 XKEYSYMDB usr X11R6 lib X11 XKeysymDB ODIFIERS im none TERMID XWINHOME usr X11R6 X X11R6 YACC bison y O XK x ops 3 2 1 2 Variabili locali Le variabili locali sono disponibili solo nella shell corrente Usando il comando integrato set senza alcuna opzione apparir un elenco di tutte le variabili comprese quelle ambientali e le funzioni Il risultato verr ordinato secondo le correnti impostazioni locali e mostrato in un formato riutilizzabile Di sotto c un file diff realizzato confrontando i risultati di printenv e set dopo aver eliminato le funzioni che vengono mostrate dal comando set franky gt diff set sorted printenv sorted grep lt awk print 2 BASE nethome franky Shell hq garrels be octarine aliases BASH bin bash Capitolo 3 L ambiente di Bash 49
2. Operatore Significato VAR e VAR Post incremento e post decremento della variabile VAR e VAR Pre incremento e pre decremento della variabile e meno e pi unario le negazione logica e a livello bit bitwise EF esponenziazione e moltiplicazione divisione resto e addizione e sottrazione lt lt e gt gt spostamento a livello bit bitwise a sinistra e a destra lt gt lt e gt operatori di confronto e uguaglianza e disuguaglianza amp AND a livello bit bitwise A OR esclusivo a livello bit bitwise OR a livello bit bitwise amp amp AND logico OR logico expr expr expr valutazione condizionale 5 lt lt gt gt amp e assegnamenti 3 separatore tra espressioni Le variabili di shell sono permesse come operandi l espansione dei parametri viene eseguita prima che sia valutata l espressione All interno di un espressione le variabili di shell possono essere referenziate per nome senza usare la sintassi dell espansione dei parametri Il valore di una variabile valutato come espressione aritmetica quando referenziato Una variabile di shell non deve avere attivato il suo attributo intero per essere utilizzata in un espressione Le costanti che iniziano per 0 zero vengono interpretate come numeri ottali Uno 0x o 0X denota un esadecimale Altrimenti i numeri assumono la forma BASE N
3. ttt EHEHE tt ttt ttt EER FE AE E AE AE AE AE AE AE HE AE EE HE Capitolo 3 L ambiente di Bash 46 cere IIEIARY 3 1 3 Cambiare i file di configurazione Quando effettuano delle modifiche ad uno qualsiasi dei file precedenti gli utenti devono riconnettersi al sistema od usare source con il file alterato affinch i cambiamenti possano avere effetto Interpretando lo script in questo modo le modifiche vengono applicate alla sessione corrente della shell E root octarine File Edit View Terminal Go Help franky gt cp bashrc bashrc old franky gt vim bashrc franky gt diff bashrc bashrc old 9d8 lt export PS1 033 1 42m USER is in w 033 0m franky gt source bashrc Illustrazione 3 1 1 Inviti differenti per utenti differenti La maggioranza degli script vengono eseguiti in un ambiente privato le variabili non vengono ereditate dai processi figli a meno che esse non siano esportate dalla shell genitrice Usare source con un file contenente comandi di shell una maniera per applicare le modifiche al vostro ambiente personale e per impostare le variabili nella shell corrente Questo esempio dimostra anche l utilizzo di inviti dif
4. Capitolo 4 Le espressioni regolari 73 intervallo in un elenco A Corrisponde alla stringa vuota all inizio di una linea Rappresenta anche i caratteri non compresi nell intervallo della lista Corrisponde alla stringa vuota alla fine di una riga b Corrisponde alla stringa vuota all estremit di una parola B Corrisponde alla stringa vuota fornita che non all edge della parola lt Corrisponde alla stringa vuota all inizio della parola gt Corrisponde alla stringa vuota alla fine della parola Due espressioni regolari possono essere concatenate la risultante espressione regolare corrisponde a qualsiasi stringa formata concatenando le due sottostringhe che corrispondono rispettivamente alle due sottoespressioni concatenate Due espressioni regolari possono essere unite con l operatore infix la risultante espressione regolare corrisponde ad ogni stringa coincidente con entrambe le sottoespressioni La ripetizione ha la precedenza sul concatenamento il quale invece ha la precedenza sull alternanza Una sottoespressione intera pu essere racchiusa tra parentesi per scavalcare queste regole di precedenza 4 1 3 Espressioni regolari elementari contro estese Nelle espressioni regolari elementari i metacaratteri e perdono il loro significato speciale usate invece le versioni con barra inversa M N AC e Y Verificate nella docume
5. if peso le Spesoideale then echo Dovreste mangiare un poco di grassi in pi else echo Dovreste mangiare un poco di frutta in pi fra anny gt peso sh 70 150 Dovreste mangiare un poco di frutta in pi anny gt peso sh 70 150 33 Uso 0 peso_in_ kili altezza_in_ centimetri Il primo argomento viene identificato come 1 il secondo come 2 e cos via Il numero totale di argomenti viene conservato in Esaminate la Sezione 7 2 5 per un modo pi elegante di stampare messaggi sull utilizzo 7 2 1 4 Controllare che un file esista Questo controllo viene svolto in moltissimi script poich inutile avviare un sacco di programmi se sapete che non funzioneranno bin bash Questo script fornisce informazioni su un file NOMEFILE 1 echo Propriet di S SNOMEFILE Cc AS NOME be Revan echo Dimensione 1s l1h SNOMEFILE awk print 5 CERM cei ESNOME er cui SUSE echo Numero di inode ls i SNOMEETLE cut da fl CEROMISI d alenes NOME orep i Vi Monca coeva ARS ala Joeiorazaloms So Up else echo File inesistente ia Osservate che il file stato riferito ad una variabile in questo caso il primo argomento dello script In alternativa quando non si forniscono argomenti le locazioni dei file vengono solitamente conservate in variabili all inizio di uno script ed al loro con
6. 11 1 2 Sintassi delle funzioni Le funzioni usano sia la sintassi function FUNZIONE COMANDI sia FUNZIONE COMANDI Ambedue definiscono una funzione di shell FUNZIONE L uso del comando integrato function facoltativo tuttavia se non utilizzato sono necessarie le parentesi I comandi elencati tra le parentesi graffe costituiscono il corpo della funzione Tali comandi sono Capitolo 11 Funzioni 155 eseguiti ogni qualvolta si specifica FUNZIONE come il nome di un comando Lo stato d uscita quello dell ultimo comando eseguito nel corpo Errori comuni Le parentesi graffe devono essere separate dal corpo con spazi altrimenti vengono interpretate nel modo sbagliato Il corpo di una funzione dovrebbe terminare con un punto e virgola o un nuovalinea 11 1 3 I parametri posizionali nelle funzioni Le funzioni sono come dei miniscript possono accettare parametri usare variabili conosciute solo all interno della funzione utilizzando l integrato di shell local e restituire valori alla shell chiamante Una funzione ha anche un sistema per interpretare i parametri posizionali Tuttavia i parametri posizionali passati ad una funzione non sono gli stessi di quelli passati ad un comando o ad uno script Quando si esegue una funzione gli argomenti di questa diventano parametri posizionali durante la sua esecuzione Lo speciale parametro che si espande al numero di parametri posizionali viene aggiornato per
7. o questo valore viene sostituito con il numero dei parametri posizionali o il numero di elementi di una matrice in generale Ci dimostrato nell esempio sottostante bob in echo SHELL bin bash bob in echo SHELL 9 bob in MATRICE uno due tre bob in echo MATRICE 10 3 3 Trasformazioni di variabili 10 3 3 1 Sostituzione VAR PAROLA Se VAR non definita o nulla la sostituisce l espansione di PAROLA altrimenti viene sostituita dal suo valore bob in echo TEST test test bob in echo TEST bob in export TEST una_ stringa bob in echo TEST test una_stringa bob in echo TEST2 TEST una_stringa Questa forma usata spesso nei test condizionali per esempio in questo Capitolo 10 Di pi sulle variabili 150 z COLONNE amp amp COLONNE 80 E una notazione abbreviata per co i AI IE ORONNE RESI COLONNE 80 EL Guardate la Sezione 7 1 2 3 per maggiori informazioni su questo tipo di prova delle condizioni Se il trattino viene sostituito con il segno uguale il valore viene assegnato al parametro se non esiste bob in echo TEST2 bob in echo TEST2 TEST una_stringa bob in echo TEST2 una_stringa La sintassi seguente controlla l esistenza di una variabile Se non stata impostata si stampa l espansione di PAROLA nell emissione standard standard output e le shell non interattive si c
8. 3 5 Alias 3 5 1 Cosa sono gli alias Un alias consente ad una stringa di essere la sostituta di una parola quando essa utilizzata come la prima parola di un semplice comando La shell conserva un elenco degli alias che possono essere definiti ed eliminati con i comandi integrati alias e unalias Fornite alias senza opzioni per mostrare un elenco di alias noto alla shell corrente franky gt alias DIETAS MCR IAS redini INS RR ROVERE N lias PAGER less r lias Txterm export TERM xterm lias XARGS xargs r lias cdrecord cdrecord dev 0 0 0 speed 8 lias e vi lias egrep grep E lias ewformat fdformat n dev d0u1743 ewfsck lias fgrep grep E lias mro merta elil5U lias h history 10 lias fformat fdformat dev fd0H1440 lias J golose IU lias ksane setterm reset Toi Es SES color auto lias m less lias md mkdir lias od od Ax ta txC lias p pstree p lias jostiaic opliate wicil lias sb ssh blubber kies eisie lias ss ssh octarine lias tar gtar lias tmp cd tmp lias unaliasall unalias a lias vi eval resize vi lias vt100 export TERM vt100 lias which type lias xt xterm bg black fg white amp MUPYA Hrankyika Gli alias sono utili per specificare la versione predefinita di un comando che esiste in diverse versioni nel vostro sistema oppure per indicare le opzioni predefinite di un comando
9. ST ESCE N TA echo Uso 0 pacchetti exit 1 IC aL yum install 1 lt lt CONFIRM 37 CONFIRM E questo come funziona lo script Quando appare l invito con la stringa Is this ok y N lo script risponde y automaticamente root picon bin install sh tuxracer Gathering header information file s from server s Server Fedora Linux 2 1386 core Server Fedora Linux 2 i386 freshrpms Server JPackage 1 5 for Fedora Core 2 Server UPackage 1 5 generic Server Fedora Linux 2 1386 updates Finding updated packages Downloading needed headers Resolving dependencies Dependencies resolved I will do the following mnagierilits imbarco T 61 26 133 Is this ok y N EnterDownloading Packages Running test transaction Test transaction complete Success tuxracer 100 done 1 1 Installed tuxracer 0 61 26 1386 Transaction s Complete Capitolo 8 Redigere script interattivi 126 8 3 Sommario In questo capitolo abbiamo imparato a fornire dei commenti dell utente e a invitare all immissione da parte dello stesso Ci normalmente si fa utilizzando la combinazione echo read Abbiamo trattato pure di come i file possono essere utilizzati come immissione o emissione ricorrendo ai descrittori di file e alla redirezione e di come questi possano essere combinati con la ricezione di dati in ingresso dall utente Abbiamo ribadito l importanza del fornire messaggi esaurienti agli utenti dei nostri sc
10. anny etc cron daily gt cat testdischi sh bin bash Questo script esegue una prova semplicissima per controllare lo spazio su disco soezio he cla avi a homun Soks eras amp ciao 7 Use sore ia essi i ue o 0 EL valoreallarme 80 if Sspazio ge Svaloreallarme then echo Almeno uno dei dischi quasi pieno mail s test quotidiano dischi root else echo Spazio disco normale mail s test quotidiano dischi root FL 7 2 3 Istruzioni if annidate Capitolo 7 Istruzioni condizionali 107 All interno dell istruzione if potete usare un altra istruzione if Potete usare tanti livelli di if annidati quanti siete in grado di gestire logicamente Questo un esempio verifica gli anni bisestili anny testdir gt cat provabisestili sh bin bash Questo script verificher se siamo o meno in un anno bisestile anno date Y ie S Saano amp 400 66 UO J then echo Questo un anno bisestile Febbraio ha 29 giorni eliz S Sanno amp dj ea 0 J then ue S Sanno amp 100 ms 0 Jp them echo Questo un anno bisestile Febbraio ha 29 giorni else echo Questo non un anno bisestile Febbraio ha 28 giorni agli else echo Questo non un anno bisestile Febbraio ha 28 giorni fai anny testdir gt date mietan ME OSOR CETEROS anny testdir gt provabisestile sh Questo non un anno bisestile 7 2 4 Operazioni booleane Lo script s
11. BASH_VERSINFO 0 2 BASH_VERSION 2 05b 0 1 release COLUMNS 80 DIRSTACK DO_FORTUNE EUID 504 GROUP S HERE home franky HISTFILE nethome franky bash_history HOSTTYPE 1686 TESCS INES 24 IACHTYPE 1i686 pc linux gnu OPTERR 1 OPTIND 1 OSTYPE linux gnu PIPESTATUS 0 0 PPID 10099 PS4 PWD_REAL pwd SHELLOPTS braceexpand emacs hashall histexpand history interactive comments monitor THERE home franky UID 504 x Awk Il linguaggio di programmazione GNU Awk spiegato nel Capitolo 6 3 2 1 3 Variabili per contenuto A parte la distinzione delle variabili in locali e globali possiamo suddividerle anche in categorie in base al tipo dei loro contenuti In base a ci le variabili sono di 4 tipi e Variabili stringa string variables e Variabili intere integer variables e Variabili costanti constant variables e Variabili matriciali array variables Tratteremo questi tipi nel Capitolo 10 Per ora lavoreremo con valori interi e stringa nelle nostre variabili 3 2 2 Creazione delle variabili Di base le variabili sono in lettere maiuscole e sono sensibili a ci Attribuire alle variabili locali un nome in minuscolo una convenzione che qualche volta viene applicata Tuttavia siete liberi di usare i nomi che preferite o di mischiare minuscole con maiuscole Le variabili possono conte
12. G FILE Vero se FILE esiste ed posseduto dall attuale ID di gruppo L FILE Vero se FILE esiste ed un collegamento simbolico N FILE Vero se FILE esiste ed stato modificato dall ultima lettura S FILE Vero se FILE esiste ed un socket FILEl nt FILE2 Vero se FILEI stato modificato pi recentemente di FILE2 oppure se FILE1 esiste e FILE2 no FILE ot FILE2 e pi vecchio di FILE2 oppure se FILE2 esiste e FILE ef FILE2 Vero se FILE1 e FILE2 si riferiscono alla stessa unit e numeri di inode o OPTIONNAME Vero se abilitata l opzione di shell OPTIONNAME z STRINGA Vero se la lunghezza di STRINGA zero Capitolo 7 Istruzioni condizionali 99 n STRINGA oppure DE NE STRINGA Vero se la lunghezza di STRINGA diversa da zero STRINGA Vero se le stringhe sono uguali Si pu usare al posto di per STRINGA2 stretta compatibilit con POSIX STRINGA1 Vi l ah li STRINGA ero se le stringhe non sono uguali STRINGA lt Vero se STRINGA1 viene prima di STRINGA2 in ordine alfabetico STRINGA2 secondo i parametri locali STRINGA lt Vero se STRINGA1 viene dopo di STRINGA2 in ordine alfabetico STRINGA2 secondo i parametri locali OP uno tra q ne 1t le gt o ge Questi operatori ARG1 OP ARG2 binari aritmetici restituiscono vero se rispettivamente ARG1 uguale a diverso da min
13. dove BASE un numero decimale tra 2 e 64 che rappresenta la base aritmetica e N un numero in quella base Se viene omesso BASE allora viene usata una base 10 Le cifre maggiori di 9 vengono rappresentate con lettere minuscole lettere maiuscole e _ in quest ordine se BASE minore o uguale a 36 le lettere minuscole e maiuscole possono essere utilizzate indifferentemente per rappresentare i numeri tra 10 e 35 Capitolo 3 L ambiente di Bash 65 Gli operatori vengono valutati per ordine di precedenza Le sottoespressioni tra parentesi sono valutate per prime e possono scavalcare le soprastanti regole di precedenza Dove possibile gli utenti di Bash dovrebbero provare ad usare la sintassi con le parentesi quadre ESPRESSIONE Tuttavia ci calcoler solo il risultato di ESPRESSIONE e non eseguir controlli franky gt echo 365 24 8760 V fra le altre la Sezione 7 1 2 2 per esempi pratici di script 3 4 7 Sostituzione dei processi La sostituzione dei processi viene supportata nei processi che hanno l incanalamento nominato named pipe FIFO o il metodo dev fd di denominazione dei file aperti Ci assume la forma lt ELENCO gt ELENCO Il processo ELENCO viene avviato con i suoi dati in ingresso e uscita input e output connessi ad un FIFO o a un qualche file in dev fd Il nome di questo file viene passato come argomento all attuale comando come risultato dell espansione Se
14. h con Is viene usata per fornire dei formati dimensionali umanamente leggibili per i file pi grandi Viene emessa una lunga lista che mostra la quantit totale dei blocchi nella directory quando l argomento una directory Questa linea ci inutile quindi aggiungiamo un asterisco Aggiungiamo pure l opzione d per la medesima ragione nel caso l asterisco si espanda ad una directory La barra inversa in questo esempio segna la continuazione di una linea V Sezione 3 3 2 Potete estrarre qualsiasi numero di colonne ed anche invertirne l ordine Nell esempio successivo ci viene dimostrato per mettere in luce le partizioni pi critiche kelly octarine gt df h sort rnk 5 head 5 3 awk print Partizione 6 t 5 piena Partizione var 86 piena Partizione usr 85 piena Partizione home 70 piena kelly octarine gt La tabella sottostante offre una panoramica dei caratteri speciali di formattazione Tabella 6 1 Caratteri di formattazione per gawk Sequenza Significato a Carattere campanello n Carattere nuovalinea t Tabulazione Apici segni del dollaro ed altri metacaratteri dovrebbero essere resi con l escape di una barra inversa 6 2 3 Il comando print e le espressioni regolari Capitolo 6 Il linguaggio di programmazione GNU awk 90 Una espressione regolare si pu usare come modello includendola tra barre Essa viene poi controllata rispetto al t
15. ia PSI u h W export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC PS1 i Sotres simulitielliza talloni eiles ror specie pooepramns ls vali less ooo fore i in oce prorile c 5 sh p co ai P s0 USIU ip then s Gal Ca done Settings for program initialization source etc java conf export NPX_PLUGIN_PATH S JRE_HOME plugin ns4plugin usr lib netscape plugins PAGER usr bin less unset i Questo file di configurazione definisce alcune elementari variabili dell ambiente della shell cos come anche alcune variabili richieste dagli utenti che fanno girare Java e o applicazioni Java nei loro navigatori di rete Guardate la Sezione 3 2 Date uno sguardo al Capitolo 7 per maggiori informazioni sul condizionale if utilizzato in questo file il Capitolo 9 tratta dei cicli come il costrutto for Il sorgente di Bash contiene dei file profile di esempio per uso generale o individuale Questi e quello nell esempio precedente necessitano di modifiche per farli funzionare nel vostro ambiente 3 1 1 2 letc bashrc Nei sistemi che offrono molteplici tipi di shell sarebbe meglio mettere delle configurazioni specifiche per Bash in tale file dal momento che etc profile viene letto anche da altre shell come la shell Bourne Errori generati da shell che non comprendono la sintassi di Bash si prevengono separando i file di configurazione per i diversi tipi di shell In questi casi bashrc
16. insinuata in molti programmi Ci potrebbero essere anche problemi quando si specifica il trattino come primo argomento dal momento che potrebbe essere interpretato come una opzione del comando precedente L uso di dev fd consente uniformit e previene la confusione michel gt filter corpo txt gz cat testata txt dev fd0 piepagina txt lp In questo chiaro esempio tutti i dati in uscita vengono per di pi incanalati attraverso lp per inviarli alla stampante predefinita 8 2 4 2 Reade exec 8 2 4 2 1 Assegnazione di descrittori di file ai file Un altra maniera per osservare i descrittori dei file di pensarli come un mezzo per assegnare un valore numerico ad un file Invece di usare il nome del file potete usare il numero del descrittore del file Il comando integrato exec pu essere utilizzato per rimpiazzare la shell del processo corrente o per alterare i descrittori dei file della shell corrente Per esempio pu essere impiegato per assegnare un descrittore di file ad un file Usate exec fdN gt file per assegnare il descrittore di file N a file per l emissione e exec fdN lt file per assegnare il descrittore di file N ad un file per l immissione Dopo che un descrittore di file stato assegnato ad un file esso pu essere utilizzato con gli operatori di redirezione della shell come dimostrato nell esempio seguente michel gt exec 4 gt risultati txt michel gt filter corpo txt gz cat testata txt dev
17. kelly octarine test gt cat processed awk DIGI Oms teu p Ons l ac gt frarco Ww 1 Prime Recon masso UV NR Use Si 52 D print Numero di record elaborati NR vo d Capitolo 6 Il linguaggio di programmazione GNU awk 94 kelly octarine test gt awk f processed awk test Record numero 1 recordl datal gt Fisico Record numero 2 record2 data2 gt dEsiciLo Numero di record elaborati 2 gt ERCEG kelly octarine test gt 6 3 4 Variabili definite dall utente A parte le variabili integrate potete definirne di proprie Quando awk incontra un riferimento ad una variabile che non esiste che non predeterminata viene creata la variabile ed inizializzata come stringa vuota Per tutti i riferimenti successivi il valore della variabile qualsiasi valore sia stato assegnato per ultimo Le variabili possono essere un valore numerico o stringa Il contenuto dei file da immettere pu anche essere assegnato alle variabili I valori possono essere assegnati direttamente utilizzando l operatore oppure potete usare il valore attuale della variabile in combinazione con altri operatori kelly octarine gt cat entrate 20021009 20021013 consulenze BigComp 2500 20021015 20021020 addestramento EduComp 2000 20021112 20021123 appdev SmartComp 10000 20021204 20021215 addestramento EduComp 5000 kelly octarine gt cat totale awk totale totale 5 T jpicilimie Vilmyalanms cento per V
18. Cambia password pdf2ps Traduttore Ghostscript da PDF a PostScript perl Glossario 183 Practical Extraction and Report Language PS Impagina l emissione di testo ping invia una richiesta di eco ad un host pr Converte file testuali per la stampa printenv Stampa tutto o parte di un ambiente procmail Elaboratore autonomo di posta ps Riporta lo stato dei processi pstree Mostra un albero dei processi pwd Stampa la corrente directory di lavoro Present Work Directory Q quota Mostra l utilizzo del disco e i limiti rcp Glossario 184 Copia remota non sicuro rdesktop Cliente del Remote Desktop Protocol reboot Ferma e riavvia il sistema renice Altera la priorit di un processo in funzione rlogin Autenticazione remota telnet non sicuro rm Rimuove un file rmdir Rimuove una directory rpm Gestore di pacchetti RPM rsh Shell remota scp Copia remota sicura screen Gestore dello schermo con emulazione VT100 Glossario 185 set Mostra imposta o modifica una variabile setterm Imposta gli attributi di un terminale sftp Secure criptato ftp sh Apre una shell standard shutdown Spegne un sistema sleep Attende per un certo periodo slocate Versione avanzata di sicurezza del GNU locate slrnn Cliente Usenet in modalit testo snort Strumento per la scoperta di intrusioni in rete sort Riordina linee di file di testo ssh Secure SHell
19. La tabella sottostante contiene una panoramica delle cosiddette primitive che configurano il comando o la lista di comandi COMANDI TEST Queste primitive sono messe tra parentesi quadre per indicare la verifica di un espressione condizionale Tabella 7 1 Espressioni primitive Primitiva Significato a FILE Vero se FILE esiste b FILE Vero se FILE esiste ed uno speciale file a blocchi c FILE Vero se FILE esiste ed uno speciale file a caratteri d FILE Vero se FILE esiste ed una directory e FILE Vero se FILE esiste f FILE Vero se FILE esiste ed un file regolare g FILE Vero se FILE esiste ed il suo bit SGID attivo h FILE Vero se FILE esiste ed un collegamento simbolico k FILE Vero se FILE esiste ed il suo bit sticky impostato l p FILE Vero se FILE esiste ed un incanalamento nominato named pipe i i FIFO r FILE Vero se FILE esiste ed leggibile s FILE Vero se FILE esiste ed ha una dimensione maggiore di zero t ED Vero se il descrittore di file FD aperto e si riferisce ad un terminale u FILE Vero se FILE esiste ed il suo bit SUID Set User ID impostato w FILE Vero se FILE esiste ed scrivibile x FILE Vero se FILE esiste ed eseguibile 0O FILE Vero se FILE esiste ed posseduto dall attuale ID di utente
20. Si vuole ruotare le registrazioni a Se s i Inserire il nome della directory che contiene le registrazioni da ruotare ii Inserire il nome dell archivio del file di registro iii Rendere le modifiche permanenti nel file crontab dell utente b Se no andare al passo 3 2 Volete ruotare un altro insieme di registrazioni a Se s ripetere il passo 1 b Se no andare al passo 3 3 Uscita L utente dovrebbe fornire informazioni al programma per fare qualcosa L inserimento dei dati da utente deve essere ottenuto e conservato L utente dovrebbe essere avvisato che il suo crontab verr modificato 1 5 5 Un esempio di script di Bash miosistema sh Lo script miosistema sh qui sotto esegue alcuni comandi ben noti date w uname uptime Capitolo 1 Bash e gli script di Bash 27 per mostrare delle informazioni su di voi ed il vostro sistema tom gt cat n miosistema sh 1 bin bash 2 ceo 3 echo Queste sono informazioni sono fornite da miosistema sh Il programma ilimnabziata Qua 4 5 eco Giao SUSIRI 6 echo J 8 echo La data odierna date questa la settimana n date 4V 9 echo 10 11 echo Questi sono gli utenti attualmente collegati 12 wo cuge UV ss 1 eiesio y USER sore wi 13 echo 14 15 echo Questo uname gt che gira in un processore uname m 16 echo IL7 18 echo Questa l informazione di uptime 19 upti
21. bin bash xv Una volta che avete individuato la parte errata del vostro script potete aggiungere le istruzioni echo prima di ogni comando di cui non vi fidate in modo che potrete vedere esattamente dove e perch le cose non funzionano Nello script d esempio script1 commentato sh avrebbe potuto essere fatto come questo supponendo ancora che l elencazione degli utenti ci dia dei problemi echo messaggio della correzione ora tentiamo di avviare il comando w w In script pi avanzati echo pu essere inserita per mostrare il contenuto di variabili in fasi diverse dello script cosicch i difetti possono essere individuati echo La variabile NOMEVAR ora impostata a S SNOMEVAR 2 4 Sommario Uno script di shell una serie riutilizzabile di comandi messi in un file di testo eseguibile Qualsiasi editor di testo pu essere impiegato per redigere degli script Gli script iniziano con seguiti dal percorso della shell che esegue i comandi dello script I commenti vengono aggiunti ad uno script per vostro futuro promemoria ed anche per renderli comprensibili ad altri utenti E meglio avere spiegazioni in eccesso piuttosto che insufficienti La ricerca di errori in uno script pu essere effettuata utilizzando le opzioni della shell Le opzioni della shell possono venir usate per una caccia agli errori parziale o per analizzare l intero script Pure l inserimento di comandi echo in punti strategici una comune tecnic
22. demone che attiva comandi periodicamente con una frequenza specificata in giorni case S1 in start SCA ANI stop stop ii status status anacfon ii restart Capitolo 7 Istruzioni condizionali 111 SCOP STANE ii condrestart if test U pidof anacron x then stop Stare fa ii echo Uso 0 start stop restart condrestart status esule dl esac I compiti da eseguire in ciascun caso come fermare ed attivare il demone sono definiti nelle funzioni che traggono parzialmente origine dal file etc rc d init d functions V il Capitolo 11 per maggiori spiegazioni 7 4 Sommario In questo capitolo abbiamo imparato come realizzare delle condizioni nei nostri script in modo che differenti azioni possano essere intraprese in base al successo o al fallimento di un comando Le azioni si possono determinare mediante l uso dell istruzione if Ci vi consente di eseguire confronti aritmetici e testuali e di verificare codici d uscita immissioni e file necessari agli script Un semplice test if then fi spesso precede dei comandi in uno script di shell per prevenire la generazione di emissioni in modo lo script pu essere avviato sullo sfondo background o attraverso il programma di utilit cron Definizioni pi complesse delle condizioni vengono di solito inserite in una istruzione case 7 5 Esercizi Qui ci sono alcune idee per farvi iniziare ad usare if negli script 1 Usate un costrutto if then
23. o qualcosa di simile da un menu Una shell che ottenete dopo aver dato il comando ssh localhost Una shell che ottenete quando vi autenticate nella console in modalit testo Una shell ottenuta con il comando xterm amp Una shell aperta dallo script miosistema sh Una shell che ottenete su un host remoto per la quale non dovete autenticarvi e o dare la password perch utilizzate SSH e forse le chiavi SSH Potete spiegare perch bash non esce quando battete Ctrl C nella riga di comando Mostrate il contenuto della catasta stack delle directory 7 Se non ancora il caso impostate il vostro invito in modo che mostri la vostra posizione nella gerarchia del sistema Per esempio aggiungete questa linea a bashrc 0 D p Capitolo 1 Bash e gli script di Bash 30 export PS1 u h w gt 8 Mostrate i comandi con il cancelletto della vostra corrente sessione di shell 9 Quanti processi stanno girando attualmente nel vostro sistema Usate ps e wc la prima linea di dati in uscita di ps non un processo 10 Come si mostra il nome host del sistema Solo il nome nient altro Capitolo 1 Bash e gli script di Bash 31 Capitolo 2 Scrivere e correggere gli script Dopo aver passato questo capitolo sarete in grado di Scrivere un semplice script Definire il tipo di shell che dovrebbe eseguire lo script Inserire dei commenti in uno script Cambiare i permessi in uno script Eseguire e
24. sed opzioni Sezione 5 1 2 195 sed script Sezione 5 3 2 segnali Sezione 12 1 1 select Sezione 9 6 separatore dei campi d emissione Sezione 6 3 2 1 separatore dei campi d immissione Sezione 3 2 4 1 Sezione 3 2 5 Sezione 6 3 separatore dei record in uscita Sezione 6 3 2 2 set Sezione 3 2 1 2 Sezione 3 6 1 Sezione 11 1 4 shell di autenticazione o di login Sezione 1 2 2 2 1 shell interattiva Sezione 1 2 2 2 1 Sezione 1 2 2 2 2 Sezione 1 2 2 3 3 shell non di autenticazione o di login Sezione 1 2 2 2 2 shell non interattiva Sezione 1 2 2 2 3 shift Sezione 9 7 single quotes Sezione 3 3 3 sintassi Sezione 1 4 1 1 sorgente Sezione 2 1 3 sostituzione Sezione 10 3 3 1 Sezione 10 3 3 3 sostituzione dei comandi Sezione 3 4 6 sostituzione dei processi Sezione 3 4 8 sottostringa Sezione 10 3 3 2 source Sezione 2 1 3 special parameters Sezione 3 2 5 standard error Sezione 8 2 3 1 standard input Sezione 8 2 3 1 standard output Indice Sezione 8 2 3 1 stato d uscita Sezione 7 1 2 1 stringa Sezione 7 1 2 3 stty Sezione 12 1 1 submenu Sezione 9 6 2 subshell Sezione 2 2 1 substring Sezione 10 3 3 2 T tcsh Sezione 1 1 2 terminologia Sezione 1 5 3 then Sezione 7 1 1 2 tilde espansione della Sezione 3 4 4 trasformazione di variabili Sezione 10 3 3 trappole Sezione 12 2 1 true Sezione 9 2 2 2 U unalias Sezione 3 5 1 Sezione 3 5 2
25. signora amd conf antivir conf xcdroast conf xinetd conf Posso fare qualcosa ancora per lei signora kelly is in etc gt Capitolo 6 Il linguaggio di programmazione GNU awk 91 6 2 5 Gli script in gawk Non appena i comandi tendono ad essere un po pi lunghi potreste desiderare di metterli in uno script in modo da riutilizzarli Uno script awk contiene istruzioni in awk che definiscono modelli ed azioni Come illustrazione realizzeremo un rapporto che mostri le nostre partizioni pi piene V Sezione 6 2 2 kelly is in gt cat diskrep awk BEGIN print ALLARME ALLARME ALLARME AsIBIOIO 9 E 4 prine UPaestiziione 4 SG Vrs Y S5 W pena END prine Wass Soana solchi per muova elise URGENTE s94 j kelly is im gt di n awk f diskrep awk ALLARME ALLARME ALLARME Partizione usr 97 piena twa Goana Solek per muori Chechak INGANTI ssis kelly is in gt Per prima cosa awk stampa un messaggio iniziale poi formatta tutte le linee che contengono un otto o un nove all inizio di una parola seguiti da un altro numero e segno di percentuale Si aggiunge un messaggio finale i Evidenziazione della sintassi Awk un linguaggio di programmazione La sua sintassi riconosciuta dalla maggioranza degli editor che eseguono l evidenziazione della sintassi per altri linguaggi come C Bash HTML ecc 6 3 Le variabi
26. ssh keygen Glossario 186 stty su tac tail talk tar tcsh telnet tex time Generazione di chiavi di autenticazione Modifica e stampa impostazioni delle linee di terminale Switch User cambia utente Concatena e stampa file al contrario Emette l ultima parte di file Parla ad un utente Utilit di archiviazione Apre una Turbo C SHell Interfaccia utente al protocollo TELNET non sicuro Formattazione e impostazione tipografica di testi Temporizza un semplice comando o d l uso delle risorse Glossario 187 tin Programma di lettura news top Mostra i principali processi della CPU touch ambia le marcature temporali dei file traceroute Stampa i pacchetti di instradamento richiesti per collegare in rete un host tripwire Un controllore di integrit dei file per i sistemi Unix twm Tab Window Manager per il sistema X Window U ulimit Controlla le risorse umask Imposta la maschera della creazione dei file degli utenti umount Smonta un file system uncompress Decomprime file compressi uniq Glossario 188 Rimuove le linee duplicate in un file ordinato update Demone del kernel per scaricare memorie di transito buffer sporche di ritorno al disco uptime Mostra il tempo di funzionamento ed il carico medio del sistema userdel Cancella l account di un utente e i file relativi V vi m Avvia l editor vi iMproved vimtutor Il corso di
27. sulle funzioni nel Capitolo 11 Le funzioni sono pi veloci Gli alias vengono presi in considerazione dopo le funzioni e cos la risoluzione pi lenta Mentre gli alias sono pi semplici da comprendere le funzioni di shell sono preferite in luogo degli alias per quasi ogni scopo Capitolo 3 L ambiente di Bash 69 3 6 Ulteriori opzioni di Bash 3 6 1 Opzioni di visualizzazione Abbiamo gi trattato di una coppia di opzioni che sono utili per correggere i vostri script In questa sezione daremo uno sguardo pi approfondito alle opzioni di Bash Usate l opzione o per dire a set dimostrare tutte le opzioni di shell willy gt set o allexport off braceexpand on emacs on errexit EE hashall on histexpand on history on ignoreeof OE interactive comments on keyword off monitor on noclobber HE12 noexec off noglob off nolog off notify off nounset off onecmd off physical off posix OTE privileged ORE verbose off vi ORE xtrace off Date un occhiata alle pagine Info di Bash sezione Shell Built in Commands gt The Set Built in per una descrizione di ogni opzione Una quantit di opzioni ha una scorciatoia da un carattere per esempio l opzione xt race corrisponde a set x 3 6 2 Opzioni di modifica Le opzioni di shell possono essere impostate in modo diverso dai valori predefiniti sia al momento della chiamata della shell sia durante l operativit della shell stessa Possono essere an
28. 0 gt var spool at 0000c010959eb deleted leg l michel miehel 64 Jan 24 Ov 1 gt yar omo iiclieesio ar l wx 1 michel michel 64 Jan 24 11 07 2 gt var spool at spool a0000c010959eb lr x 1 michel michel 64 Jan 24 11 07 3 gt proc 21949 fd E uno con cron michel gt crontab 1 TADORNO TEED ESEE dit the master and reinstall i emo cagatalo 21968 smsrenlilec ie Usa 24 190341 2003 i Cron varsion gic chaps zul v 1 9 2006 09 26 09 42 45 tille mao S 32 1 e lg Ll foroe seli re gt ve tuo ECES eroga michel gt cat var tmp fdtest cron Coralmiy e 1 michel michel 64 van 24 11 32 0 gt pipe 124440 l rs 1 michel michel 64 Jan 24 11 32 1 gt var tmp fdtest cron lenge 1 michel michel 64 Jan 24 11 32 2 gt pipe 124441 e iii 1 michel michel 64 Jan 24 11 32 3 gt proc 21974 d 8 2 3 2 Redirezione degli errori Dagli esempi precedenti chiaro che potete fornire fili in ingresso e uscita ad uno script v Sezione 8 2 4 per maggiori informazioni ma alcuni tendono a dimenticarsi di redirigere gli errori emissione che potrebbe essere dipesa da questi Altres se siete fortunati gli errori vi saranno inviati a mezzo posta ed eventuali cause di fallimento potrebbero essere svelate Se non siete cos fortunati gli errori vi faranno fallire il vostro script e non verranno intercettati o inviati da nessuna parte cos che non potrete iniziare a fare
29. 10 ore fa utilizzando grep ma tralasciando le directory Mettere questi comandi in uno script di shell che generi dei risultati comprensibili 9 Potete trovare un alternativa a wc 1 utilizzando grep 10 Usando la tabella del file system per esempio etc fstab elencate le unit disco locali 11 Realizzate uno script che verifichi se un utente esiste in etc passwd Per ora potete specificare il nome utente nello script non dovete lavorare con argomenti e condizioni in questa fase 12 Mostrate i file di configurazione in etc contenenti numeri nei loro nomi sai Capitolo 4 Le espressioni regolari 79 Capitolo 5 L editor di flussi GNU sed Al termine di questo capitolo avrete appreso gli argomenti seguenti Cos sed Uso interattivo di sed Espressioni regolari e modifica dei flussi Utilizzo dei comandi di sed negli script gt Questa una introduzione Tali spiegazioni sono lontane dall essere esaustive e certamente non vanno ritenute utilizzabili come il definitivo manuale utente di sed Questo capitolo stato incluso solamente per mostrare alcuni dei pi interessanti argomenti dei capitoli successivi e perch ogni utente esperto possa avere una conoscenza di base sulle cose che si possono fare con questo editor Per informazioni dettagliate fate riferimento alle pagine info e man di sed 5 1 Introduzione 5 1 1 Che cosa sed Uno Stream EDitor editor di flussi si usa per eseg
30. 2 gt dev null bzip2 TARFILE Copia il file in un altro host abbiamo le chiavi ssh per fare questo lavoro senza bisogno di interventi scp S BZIPFILE SERVER REMOTEDIR gt dev null 2 gt amp 1 Crea una marca temporale in un file di registro date gt gt LOGFILE echo salvataggio riuscito gt gt SLOGFILE Directory voluminose e banda passante limitata Quello sopra solo un esempio che ognuno pu comprendere usando una piccola directory e un host sulla stessa sottorete In base alla vostra larghezza di banda la dimensione della directory e della posizione del server remoto esso pu richiedere una insopportabile quantit di tempo per eseguire le copie di salvataggio con questo meccanismo Per directory pi voluminose e una larghezza di banda inferiore usate rsync per mantenere le directory allineate ad entrambi i capi 3 3 Caratteri tra gli apici 3 3 1 Perch Molti tasti hanno dei significati speciali in alcuni contesti La virgolettatura o quoting viene utilizzata per togliere il significato speciale dei caratteri e delle parole le virgolette o apici possono disabilitare il trattamento dei caratteri speciali possono prevenire che parole riservate vengano riconosciute come tali e sono in grado di disabilitare l espansione dei parametri 3 3 2 Caratteri di escape Capitolo 3 L ambiente di Bash 59 I caratteri di escape si usano per rimuovere il significato s
31. ANSI C quoting Sezione 3 3 5 apici singoli Sezione 3 3 3 argomenti Sezione 7 2 1 2 espansione aritmetica Sezione 3 4 7 apici doppi Sezione 3 3 4 array Sezione 10 2 1 awk Sezione 6 1 awkprogram Sezione 6 1 2 B bash Sezione 1 2 bash_login Sezione 3 1 2 2 bash_logout Sezione 3 1 2 5 bash_profile Sezione 3 1 2 1 bashrc Sezione 3 1 2 4 batch editor Sezione 5 1 1 break Sezione 9 5 1 boolean operators Sezione 7 2 4 Indice Bourne shell Sezione 1 1 2 brace expansion Sezione 3 4 3 built in commands Sezione 1 3 2 C caratteri di virgolettatura Sezione 3 3 case istruzioni Sezione 7 2 5 cerca e sostituisci Sezione 5 2 4 chiamata Sezione 1 2 2 1 chiamata da remoto Sezione 1 2 2 2 6 child process Sezione 1 3 1 classi di caratteri Sezione 4 2 2 2 Sezione 4 3 2 comandi integrati Sezione 1 3 2 combined expressions Sezione 7 1 1 1 command substitution Sezione 3 4 6 commenti Sezione 2 2 2 comparazione dei modelli Sezione 4 3 conditionals Sezione 7 1 condizionali Sezione 7 1 configurazione file di Sezione 3 1 confronti numerici Sezione 7 1 2 2 costanti Sezione 10 1 3 continue Sezione 9 5 2 controllo segnali di Sezione 12 1 1 3 correzione degli script Sezione 2 3 creazione di variabili Sezione 3 2 2 192 csh La C SHell Sezione 1 1 2 D debugging scripts Sezione 2 3 declare Sezione 10 1 2 Sezione 10 2 1 descrittori dei file Sezione 8 2
32. Ei ica Questo script richiamato nel prossimo che d altra parte esporta le sue variabili menu e animale anny testdir gt cat cibo sh bin bash Questo script agisce in base allo stato di uscita dato da pinguino sh export menu 1 export animale 2 cibo nethome anny testdir pinguino sh cibo menu animal case in 1 Capitolo 7 Istruzioni condizionali 109 echo Guardia Meglio che tu dia loro un pesce altrimenti diventano violenti echo Guardia E a causa della gente come te che lasciano la terra tutto il tempo echo Guardia Compra il cibo che lo Zoo fornisce agli animali tu come pensi che sopravvivano ii echo Guardia Non scordare la guida Dari esac anny testdir gt cibo sh mela pinguino A Tux non piace quello Tux vuole pesce Guardia Meglio che tu dia loro un pesce altrimenti diventano violenti Come potete vedere i codici di stato d uscita possono essere scelti liberamente Di solito i comandi esistenti hanno una serie di codici determinati guardate il manuale del programmatore di ciascun comando per maggiori informazioni 7 3 Uso delle istruzioni case 7 3 1 Condizioni semplificate Le istruzioni if annidate potrebbero essere belle ma non appena avete a che fare con una coppia di possibili diverse azioni da intraprendere esse tendono a confondere Per le condizioni pi complesse utilizzate la sintassi di case case ESPRESSIONE in C
33. SS U coller a W S4 END gt reime Y nTotale entrate total kelly octarine gt awk f totale awk test Inviare conto per 2500 dollari a BigComp Inviare conto per 2000 dollari a EduComp Inviare conto per 10000 dollari a SmartComp Inviare conto per 5000 dollari a EduComp Totale entrate 19500 kelly octarine gt Sono ammesse abbreviazioni tipo C come VAR valore 6 3 5 Ulteriori esempi L esempio della Sezione 5 3 2 diviene molto pi semplice quando usiamo uno script awk kelly octarine html gt cat make html from text awk EGIN print lt html gt n lt head gt lt title gt HTML generato da awk lt title gt lt head gt n lt body gcolor FFFFfF gt print 0 D print lt pre gt n lt body gt n lt html gt Ho w E pure il comando da eseguire pi immediato quando si utilizza awk al posto di sed kelly octarine html gt awk f make html from text awk testfile gt file html Capitolo 6 Il linguaggio di programmazione GNU awk 95 Esempi di awk nel vostro sistema Facciamo di nuovo riferimento alla directory contenente gli initscript nel vostro sistema Inserite un comando simile al seguente per vedere pi esempi pratici dell uso ad ampio spettro del comando awk grep awk etc init d 6 3 6 Il programma printf Per un controllo maggiormente preciso sul formato di emissione rispetto a quello che normalmente viene fornito da print utilizzate printf Il co
34. TEST Il nuovo nome di TI EST test test ls a test test Il tr parte del pacchetto textutils pu eseguire tutti i tipi di trasformazioni di caratteri 9 6 Creazione di menu con l integrato select 9 6 1 In generale 9 6 1 1 Uso di select Il costrutto select permette una generazione semplice di menu La sintassi abbastanza simile a quella del ciclo for select PAROLA in LISTA do COMANDI RELATIVI done LISTA viene espansa generando un elenco di voci L espansione viene stampata nell errore standard standard error ciascuna voce preceduta da un numero Se non presente in LISTA vengono stampati i parametri posizionali come se fosse stato specificato in L Capitolo 9 Compiti ripetitivi STA stampata 138 solo una volta Con la stampa di tutte le voci viene stampato l invito PS3 e viene letta una sola linea dall immissione standard Se questa linea consiste in un numero che corrisponde ad una delle voci il valore di PAROLA viene impostato con il nome di quella voce Se la linea vuota le voci e l invito PS3 vengono nuovamente mostrati Se viene letto un carattere EOF End Of File il ciclo si interrompe Dal momento che la maggioranza degli utenti non ha un indizio su quale chiave sia usata per la sequenza EOF pi alla loro portata avere un comando break come una delle voci Qualsiasi altro valore della linea letta imposter PAROLA affinch sia una
35. Vim vmstat Riferisce le statistiche della memoria virtuale w Mostra chi collegato e cosa sta facendo wall Invia un messaggio sul terminale di ognuno WC Stampa il numero di byte parole e linee nei file which Glossario 189 Mostra il percorso intero dei comandi di shell who Mostra chi collegato whoami Mostra l ID dell attuale utente whois Effettua una ricerca nella basedati whois o dei nomi nic write Invia un messaggio ad un altro utente xauth X authority file utility xcdroast Interfaccia grafica di cdroast xclock Orologio analogico digitale per X xconsole Controlla i messaggi della console di sistema tramite X xdm Gestore dello schermo X con supporto per XDMCP selettore di host xdvi Visualizzatore DVI Glossario 190 xfs Server X dei font xhost Programma per X di controllo degli accessi al server xinetd Il demone esteso dei servizi Internet xload Presentazione per X della media di carico di sistema xIsfonts Visualizzatore per X dell elenco dei font del server xmms Riproduttore audio per X xterm Emulatore di terminale per X zcat Comprime o espande file zgrep Ricerca eventuali file compressi in base ad una espressione regloare zmore Filtro per la visione di testo compresso Glossario 191 Indice A alias Sezione 3 5 1 alias rimozione degli Sezione 3 5 2 ancore delle parole Sezione 4 2 2 1 ancore di linea Sezione 4 2 2 1
36. alias dh df h franky gt dh Filesystem Size Used Avail Use Mounted on dev hda7 1 3G 272M 1018M 225 dev hdal 121M 9 4M 105M boot dev hda2 13G 8 7G 3 7G 70 home dev hda3 13G 5 3G 7 16 43 Moe none 243M 0 243M dev shm dev hda6 SMOG 572M 85 aS dev hda5 sode SE 725M 86 var franky gt unalias dh franky gt dh bash dh command not found franky gt Bash legge sempre almeno una linea completa di dati in ingresso prima di eseguire uno qualsiasi dei comandi di quella linea Gli alias vengono espansi quando viene letto un comando non quando esso viene eseguito Dunque una definizione di alias che compare nella stessa linea come altro comando non ha effetto fino a che non viene letta la successiva linea in ingresso I comandi che seguono la definizione di alias in quella linea non sono influenzati dal nuovo alias Tale comportamento anche un problema quando vengono eseguite delle funzioni Gli alias vengono espansi quando viene letta la definizione di una funzione non quando la funzione viene eseguita perch la definizione di una funzione essa stessa un comando composto Di conseguenza gli alias definiti in una funzione non sono disponibili se non dopo l esecuzione di quella funzione Per essere sicuri mettete sempre le definizioni degli alias in una riga separata e non utilizzate alias in comandi composti I processi figli non ereditano gli alias La shell Bourne sh non riconosce gli alias Di pi
37. bash Questo genera un file ogni 5 minuti while true do touch pic date s jpg sleep 300 done Osservate l uso del comando date per generare tutti i tipi di nomi di file e directory Guardate le pagine man per maggiori informazioni Z Usate il sistema L esempio precedente a scopo dimostrativo Verifiche regolari si possono ottenere con il programma di utilit cron Non scordate di redirigere l emissione e gli errori quando utilizzate script che vengono eseguiti dal vostro crontab 9 2 2 3 Uso dell immissione da tastiera per controllare il ciclo while Questo script pu essere interrotto dall utente quando si inserisce una sequenza Ctrl C bin bash Questo script distribuisce saggezza FORTUNE usr games fortune while true do echo In che materia vuoi consigli cat lt lt materie politica startrek kernelnewbies Sport bofh excuses magia amore Capitolo 9 Compiti ripetitivi 132 letteratura droghe educazione materie echo aclio cia Winrracene dea cue seliter read materia echo echo Consiglio grartvicto in marceria 0i Smaterias Y echo SFORTUNE materia echo done Viene usato un documento here per presentare all utente le scelte possibili E di nuovo il test true ripete i comandi della lista COMANDI CONSEGUENTI ancora e ancora 9 2 2 4 Calcolo di una media Questo script calcola la media di un immissione di utente che viene testata prima dell elab
38. bin apachectl graceful done exit 0 I primi due controlli sono eseguiti per verificare se l utente corretto sta avviando lo script con i giusti argomenti I nomi degli host che necessitano di essere configurati sono elencati nella matrice farm_hosts Poi tutti questi host vengono forniti tramite il file di configurazione di Apache dopo di che si riavvia il demone Notate l utilizzo dei comandi della suite Secure Shell nel criptare le connessioni verso gli host remoti Capitolo 10 Di pi sulle variabili 148 Grazie Eugene e collega per questo contributo Dan Richter ha contribuito all esempio seguente Questo il problema con cui si confrontato Nella mia societ abbiamo demo del nostro sito web e ogni settimana qualcuno deve testarle tutte Cos ho un attivit di cron che riempie una matrice con tutti i possibili candidati usa date W per trovare la settimana dell anno ed esegue un operazione di modulo per trovare l indice corretto La persona fortunata viene notificata tramite posta elettronica E questo stato il suo modo di risolverlo bin bash This is get tester address sh First we test whether bash supports arrays Support for arrays was only added recently whotest 0 test echo Failure arrays not supported in this version of bash amp amp exit 2 Our list of candidates Feel fr wO Lel o remove candidates wholist Bob Smith lt bob example com gt Jane L Willia
39. bob in echo STRINGA nome testo questoeuntestomoltolungo Maggiori informazioni si possono trovare nelle pagine info di Bash 10 4 Sommario Normalmente una variabile pu contenere qualunque tipo di dati a meno che siano dichiarate esplicitamente Le variabili costanti si impostano usando il comando integrato readonly Una matrice contiene un insieme di variabili Se viene dichiarato un tipo di dato allora tutti gli elementi della matrice saranno impostati per contenere solo questo tipo di dato Le funzionalit di Bash consentono la sostituzione e la trasformazione al volo delle variabili Le operazioni standard comprendono il calcolo della lunghezza di una variabile aritmetica con le variabili sostituzione del contenuto delle variabili e di parte di esso 10 5 Esercizi Qui ci sono alcuni rompicapi 1 Redigete uno script che faccia quanto segue Mostri il nome dello script che in esecuzione Mostri il primo terzo e decimo argomento fornito allo script Mostri il numero totale di argomenti passati allo script Se ci sono pi di tre parametri posizionali usate shift per muovere tutti i valori di 3 posizioni verso sinistra Stampi tutti i valori degli argomenti restanti Stampi il numero di argomenti Controllate con zero uno tre e pi di dieci argomenti 2 Redigete uno script che implementi un semplice navigatore web in modalit testuale usando wget e links dump per mostrare l
40. bob in echo VARIABILE 2 bob in VARIABILE stringa bob in echo VARIABILE stringa Esistono casi in cui desiderate evitare questo genere di comportamento per esempio quando si gestiscono numeri telefonici e di altro tipo A parte gli interi e le variabili potete anche specificare una variabile che sia una costante Ci viene fatto spesso all inizio di uno script quando viene dichiarato il valore della costante Dopo di ci esistono solo riferimenti al nome di variabile della costante cosicch quando necessario modificare la costante ci dovr essere fatto una sola volta Una variabile pu essere anche una serie di variabili di qualsiasi tipo una cosiddetta matrice o array di variabili VARO VAR1 VAR2 VARN 10 1 2 Uso dell integrato declare Utilizzando un istruzione declare possiamo limitare l assegnamento di valori alle variabili La sintassi per declare la seguente declare OPZIONI VARIABILE valore Capitolo 10 Di pi sulle variabili 144 Le seguenti opzioni sono utilizzate per determinare il tipo di dati che pu contenere la variabile e per assegnarle attributi Tabella 10 1 Opzioni dell integrato declare Opzione Significato a La variabile una matrice array Solo utilizzo di nomi di funzione i La variabile viene trattata come un intero la valutazione aritmetica si esegue quando viene assegnato un valore alla variabile v Sezione 3 4 6
41. che aggiunga un utente locale al sistema Lo script dovrebbe Accettare solo un unico argomento oppure uscire dopo la stampa di un messaggio di istruzioni Controllare etc passwd e decidere sul primo ID utente libero Stampare un messaggio contenente tale ID creare un gruppo privato per questo utente verificando il file etc group Stampare un messaggio contenente l ID del gruppo Condividere le informazioni con l utente operatore un commento che descriva questo utente una scelta da un elenco di shell controllate l accettabilit altrimenti uscite stampando un messaggio data di scadenza di questo account gruppi extra a cui potrebbe appartenere il nuovo utente Con le informazioni ottenute aggiungere una linea a etc passwd etc group e letc shadow creare la directory personale dell utente home con i permessi corretti aggiungere l utente ai gruppi secondari desiderati Impostare la password di questo utente come conosciuta stringa predefinita 5 Riscrivete lo script della Sezione 7 2 1 4 in modo che esso legga l immissione dall utente piuttosto che la prenda dal primo argomento Capitolo 8 Redigere script interattivi 128 Capitolo 9 Compiti ripetitivi Al termine di questo capitolo sarete in grado di usare i cicli for while e until e decidere quale ciclo sia adatto nella circostanza usare gli integrati di Bash break e continue realizzare script che usino l istruzione select reali
42. che il vostro programma elaborer Per tale motivo i programmi awk sono spesso piacevoli da leggere e scrivere Cosa significa veramente Capitolo 6 Il linguaggio di programmazione GNU awk 87 Tempo fa negli anni 70 tre programmatori decisero di creare questo linguaggio I loro nomi erano Aho Kernighan e Weinberger Presero il primo carattere di ciascuno dei loro nomi e li misero assieme Cos il nome del linguaggio avrebbe potuto essere stato tuttalpi wak 6 1 2 comandi di gawk Quando fate girare awk specificate un programma awk che dice ad awk cosa fare Il programma consiste in una serie di regole rules pu anche contenere definizioni di funzioni cicli condizioni ed altri costrutti di programmazione funzionalit avanzate che per ora ignoreremo Ogni regola precisa un solo modello da cercare ed una operazione da eseguire nel momento in cui si riscontra il modello Ci sono diversi modi per avviare awk Se il programma breve pi semplice lanciarlo da linea di comando Questo potrebbe apparire cos awk f FILEPROGRAMMA fileiningresso 6 2 Il programma print 6 2 1 Stampa di campi selezionati Il comando print in awk emette dei dati selezionati dal file in ingresso Quando awk legge una linea di un file la divide in campi basandosi sullo specifico separatore di campi in ingresso input field separato o FS che una variabile di awk v Sezione 6 3 2 Questa variabile predefinita per
43. correggere uno script 2 1 Creare ed avviare uno script 2 1 1 Scrittura e denominazione Uno script di shell una sequenza di comandi che dovete usare frequentemente Tale sequenza viene eseguita normalmente inserendo il nome dello script nella linea di comando In alternativa potete usare gli script per automatizzare dei compiti utilizzando lo strumento cron Un altro uso degli script si ha nella procedura UNIX di avvio e spegnimento in cui le operazioni dei demoni e servizi vengono stabilite negli init script Per creare uno script di shell aprite un nuovo file vuoto nel vostro editor Va bene qualsiasi editor di testo vim emacs gedit dtpad eccetera sono tutti validi Potreste tuttavia desiderare di scegliere un editor pi avanzato come vim o emacs perch questi possono essere configurati per riconoscere la sintassi delle shell e di Bash e possono essere di grande aiuto nel prevenire quegli errori che i principianti fanno di frequente come il dimenticare parentesi e punti e virgola i Evidenziazione della sintassi in vim Per attivare l evidenziazione della sintassi in vim usate il comando syntax enable oppure sy enable oppure syn enable Potete aggiungere questa impostazione al vostro file vimrc per renderla permanente Capitolo 2 Scrivere e correggere gli script 32 Mettete i comandi UNIX nel file nuovo vuoto come li inserireste nella linea di comando Come trattato nel capitolo precedente v Sezione 1 3 i co
44. dell utente potrebbe puntare a etc bashrc per includerlo nel processo di inizializzazione della shell al momento dell autenticazione Potreste anche trovare che nel vostro sistema etc profile contiene solo l ambiente di shell e le impostazioni d avvio mentre etc bashrc contiene le definizioni complessive del sistema per le funzioni di shell e gli alias Il file etc bashrc potrebbe essere richiamato in etc profile o nei file di inizializzazione shell di un singolo utente Il sorgente contiene dei file bashrc d esempio oppure potreste trovarne una copia in usr share doc bash 2 05b startup files Questo una porzione del bashrc allegato alla documentazione di Bash Capitolo 3 L ambiente di Bash 43 alias 11 Vls L alias dir 1s ba alias c clear alias lss ls Color alias mroe more alias pdw pwd alias S MNSE coloni pskill lesal pie pid ps ax grep 1 grep v grep gawk print 1 Ju echo n killing Sl process Spid Ii IL 9 Spie echo slaughtered Escludendo gli alias generali contiene degli utili alias che fanno funzionare i comandi anche quando li scrivete in modo errato Nella Sezione 3 5 2 tratteremo degli alias Questo file contiene una funzione pskill le funzioni saranno studiate in dettaglio nel Capitolo 11 3 1 2 file di configurazione del singolo utente Non ho questi file Questi file potrebbero non esserci in origine nella vostra directory pe
45. destinazione fd 7 vecchia destinazione di fd 0 cancella fd 7 exec 0 lt amp 7 7 lt amp cho A Inserire un commento o INVIO per nessun commento read commento echo commento gt gt CONFIG echo Salvataggio informazioni degli host Per primo prepara un file hosts privo di commenti TEMP var tmp hosts tmp cati eC hosto crasso av Vit 3 LemaMDu ti exec 7 lt amp 0 exec lt STEMP read ipl nomel aliasl read ip2 nome2 alias2 echo La tua configurazione locale di host gt gt SCONFIG echo S ipl nomel aliasl gt gt SCONFIG CECHOMUS p28S nome 220 LS CONTO exec 0 lt amp 7 7 lt amp cho n Inserire un commento o INVIO per nessun commento read commento echo commento gt gt CONFIG EMES TEMEN michel testdir gt notesistema sh L emissione sar salvata in var tmp sysconfig out Salvataggio informazioni su account di root Inserire un commento o INVIO per nessun commento password suggerita blue lagoon Salvataggio informazioni degli host Inserire un commento o INVIO per nessun commento in DNS centrale michel testdir gt cat var tmp sysconfig out Le informazioni sul tuo account di root root x 0 0 root root bin bash password suggerita blue lagoon La tua configurazione locale di host Capitolo 8 Redigere script interattivi 124 127 0 0 1 localhost localdomain localhost 192 168 42 1 tintagel kingarthur com tintagel in DNS
46. e dai comandi integrati Le espressioni possono essere unarie o binarie Le espressioni unarie vengono spesso utilizzate per esaminare lo stato di un file Vi serve solo un oggetto per esempio un file per realizzare l operazione Esistono pure degli operatori di stringa e degli operatori di confronto numerico questi sono operatori binari che richiedono due elementi per completare l operazione Se l argomento di FILE di uno degli unari nella forma dev d N allora il descrittore dei file N selezionato Se l argomento di FILE di uno degli unari del tipo dev stdin dev stdout o dev stderr allora rispettivamente selezionato il descrittore dei file 0 1 o 2 Le espressioni condizionali sono trattate in dettaglio nel Capitolo 7 Maggiori informazioni sui descrittori dei file nella Sezione 8 2 3 1 2 2 5 Aritmetica della shell La shell consente di calcolare delle espressioni aritmetiche con una delle espansioni della shell o con l integrato let Il calcolo viene svolto con interi di dimensione fissa senza controllo degli eccessi sebbene la divisione per 0 venga intercettata e segnalata come un errore Gli operatori e le loro precedenze e combinazioni sono le stesse del linguaggio C v Capitolo 3 1 2 2 6 Gli alias Gli alias permettono di sostituire una stringa con una parola quando viene utilizzata come prima parola di un semplice comando La shell conserva un elenco degli alias che pu essere abil
47. echo Figura 2 1 script1 sh Scrivete questo script da voi stessi come meglio potete Potrebbe essere una buona idea creare una directory scripts per tenere i vostri script Aggiungete la directory ai contenuti della variabile PATH export PATH PATH scripts Se state appena incominciando con Bash utilizzate un editor testuale che usi colori differenti per differenti costrutti di shell L evidenziazione della sintassi supportata da vim gvim x emacs kwrite e molti altri editor controllate la documentazione del vostro editor preferito P Inviti differenti Gli inviti prompt in questo corso possono variare in base allo spirito dell autore Ci si accosta pi alle situazione della vita reale piuttosto del tradizionale educativo invito L unica convenzione a cui ci atteniamo che l invito di root termina con un segno cancelletto o hash mark Capitolo 2 Scrivere e correggere gli script 34 2 1 3 Esecuzione dello script Lo script per poter essere lanciato dovrebbe avere i permessi di esecuzione per gli utenti corretti Quando si impostano i permessi verificate di ottenere realmente i permessi che volete Fatto ci lo script pu avviarsi come qualunque altro comando willy scripts gt chmod utz scriptl sh willy scripts gt ls l scriptl sh impiega IL gal IU Wally 456 Dee 24 Peil sessi sa Wat libys gt scrslori sla The script starts now eo wakisi I will now fetch you a list of connected
48. espande un file halt Ferma il sistema head Emette la prima parte dei file help Mostra gli aiuti sui comandi integrati della shell host Programma di utilit per vedere DNS httpd Server Apache dell HyperText Transfer Protocol id Stampa gli UID e GID attuali ed effettivi ifconfig Configura l interfaccia di rete o ne mostra la configurazione Glossario 178 info Legge i documenti Info init Inizializzazione dei controlli dei processi iostat Mostra le statistiche I O ip Mostra modifica lo stato delle interfacce di rete ipchains Amministrazione del firewall IP iptables Amministrazione dei filtri dei pacchetti IP jar Strumento di archiviazione Java jobs Elenca le operazioni dietro le quinte kdm Desktop manager gestore scrivania per KDE kill all Termina i processi Glossario 179 ksh Apre una shell Korn L Idapmodify Modifica un inserimento LDAP Idapsearch Strumento di ricerca LDAP less more con delle caratteristiche lilo Boot Loader caricatore dell avvio di Linux links Navigatore WWW in modalit testo In Crea collegamenti tra file loadkeys Caricale tabelle di traduzione della tastiera locate Trova file logout Chiude la shell corrente lp Glossario 180 Invia richieste al servizio di stampa LP lpq Programma per esaminare la coda d attesa della stampa lpr Stampa non in linea Iprm Rimuove richieste di stampa Is Elenca
49. essere di uno o pi spazi o tabulazioni Le variabili 1 2 3 N contengono i valori del primo secondo terzo fino all ultimo campo di una linea in ingresso La variabile 0 zero contiene il valore dell intera linea Ci viene illustrato nella immagine successiva dove vediamo sei colonne in uscita del comando df Capitolo 6 Il linguaggio di programmazione GNU awk 88 Figura 6 1 Campi in awk File Edit View Terminal Go Help kelly octarine kelly df h Filesystem Size Used Avail Use Mounted on dev hda7 1 3G 274M 1016M 22 dev hdal 121M 9 4M 105M 9 boot dev hda2 13G 8 7G 3 7G 70 home 13G 5 6G 6 8G 45 opt 243M O 243M 0 dev shm 3 9G 3 3G 480M 88 usr 5 2G 4 6G 431M 92 var nf h nil S Va 2 3 4 5 6 Nei dati in uscita di ls 1 ci sono 9 colonne L istruzione print usa questi file nel modo seguente kelly octarine test gt ls 1 awk print 5 9 loterie 121script sed 120temp_file 126test 120twolines 44ltxt2html sh kelly octarine test gt Questo comando ha stampato la quinta colonna di un lungo elenco di file che contiene la dimensione dei file e l ultima colonna il nome del file Questi dati in uscita non sono molto leggibili a meno che utilizziate il modo ufficiale di riferimento alle colonne che quello di separare con una virgola quelle che volete stampare In tal caso il carattere separatore di uscita predefinito di solito uno spazio verr inserito t
50. fd 0 piepagina txt gt amp 4 michel gt cat risultati txt Questo testo viene stampato all inizio di ogni lavoro di stampa e ringrazia l amministratore di sistema per averci predisposto una infrastruttura di stampa cos grande Testo da filtrare Questo testo viene stampato alla fine di ciascun lavoro di stampa a Descrittore di file 5 L uso di questo descrittore dei file potrebbe causare dei problemi v Advanced Bash Scripting Guide capitolo 16 Siete fortemente consigliati di non usarlo 8 2 4 2 2 Read negli script Capitolo 8 Redigere script interattivi 123 Quello seguente un esempio che mostra come potete alternare immissione di file ad immissione tramite linea di comando michel testdir gt cat notesistema sh bin bash Questo script crea un indice dei file config importanti li mette insieme in un file di salvataggio e consente di aggiungere commenti a ciascun file CONFIG var tmp sysconfig out rm SCONFIG 2 gt dev null echo L emissione sar salvata in SCONFIG crea fd 7 con la stessa destinazione di fd 0 salva il valore stdin exec 7 lt amp 0 aggiorna fd 0 al file di destinazione etc passwd exec lt etc passwd Legge la prima linea di etc passwd read rootpasswd echo Salvataggio informazioni su account di root echo Le informazioni sul tuo account di root gt gt SCONFIG echo rootpasswd gt gt SCONFIG aggiorna fd 0 per puntare alla
51. file Discuteremo in dettaglio di questi tipi di espansione nella Sezione 3 4 Capitolo 1 Bash e gli script di Bash 24 1 4 1 6 Redirezioni Prima dell esecuzione di un comando i suoi dati in ingresso ed uscita potrebbero essere rediretti utilizzando una speciale notazione interpretata dalla shell La redirezione pu essere usata anche per aprire e chiudere file del corrente ambiente di esecuzione della shell 1 4 1 7 Esecuzione dei comandi Quando un comando in esecuzione le parole che l analizzatore sintattico parser ha segnato come assegnazioni di variabili precedendo il nome del comando e le redirezioni vengono salvate quale riferimento futuro Le parole che non sono assegnazioni di variabili o redirezioni vengono espanse la prima parola che rimane dopo l espansione viene presa quale nome del comando ed il resto costituisce gli argomenti di quel comando Vengono poi eseguite le redirezioni quindi le stringhe assegnate alle variabili vengono espanse Se non risulta alcun nome di comando le variabili influenzeranno l attuale ambiente di shell Una parte importante dei compiti della shell la ricerca dei comandi Bash fa ci come segue controlla se il comando contiene delle barre Se non cos verifica per prima cosa con l elenco delle funzioni per vedere se contiene un comando in base al nome che stiamo cercando e se il comando non una funzione controlla se c nell elenco degli integrati e se
52. i confronti come questo test whoami root amp amp echo state usando account senza privilegi exit 1 Nessuna uscita Se invocate exit in una sottoshell questa non passer le variabili a quella genitrice Usate e al posto di e se non volete che Bash si divida in una sottoshell Vedete le pagine info di Bash per maggiori informazione sulle comparazioni dei modelli con i costrutti ESPRESSIONE e ESPRESSIONE 7 2 Uso di if pi avanzato 7 2 1 Costrutti iflthenlelse 7 2 1 1 Esempio banale Questo il costrutto da impiegare per intraprendere una strada d azione se i comandi if danno vero e un altra se danno falso Un esempio freddy scripts gt genere maschile freddy scripts gt if genere f Capitolo 7 Istruzioni condizionali 103 Ancora immissione gt then echo Piacere di conoscerla Signora Ancora immissione gt else echo Come mai la signora non ha ancora da bere Ancora immissione gt fi Come mai la signora non ha ancora da bere freddy scripts gt contro Contrariamente a impedisce la divisione in parole dei valori di variabile Cos se VAR var con spazi non vi serve raddoppiare gli apici a VAR in una prova anche se l uso degli apici resta una buona abitudine Inoltre previene l espansione dei nomi di percorso per cui le stringhe letterali con metacaratteri non cercano di espandersi nei nomi dei file Usando e inter
53. ii sa echo Hai scelto NOMFILE REPLY chmod go rwx SNOMEFILE ii esac done rm ABBANDONO 9 6 2 Sottomenu Qualunque istruzione all interno di un costrutto select pu essere un altro ciclo select abilitando sottomenu dentro menu Di base la variabile PS3 non viene modificata quando si inserisce un ciclo select annidato Se volete un invito diverso nel sottomenu assicuratevi di impostarlo al momento giusto 9 7 L integrato shift 9 7 1 Che cosa fa Il comando shift uno degli integrati della shell Bourne che giungono con Bash Questo comando prende un solo argomento un numero I parametri posizionali vengono spostati a sinistra da questo numero N I parametri posizionali da N 1 a vengono rinominati con i nomi di variabile da 1 a N 1 Supponete di avere un comando che accetta 10 argomenti e N 4 allora 4 diviene 1 5 diviene 2 e cos via 10 diventa 7 e gli originali 1 2 e 3 vengono scartati Se N zero o maggiore di i parametri posizionali non vengono modificati il numero totale di argomenti v Sezione 7 2 1 2 e il comando non ha effetto Se N non presente si suppone che sia 1 Lo stato di ritorno zero a meno che N sia maggiore di o minore di zero altrimenti non zero 9 7 2 Esempi Un istruzione shift si usa di solito quando il numero di argomenti per un comando non noto a priori per esempio quando gli utenti possono dare qua
54. il contenuto delle directory lynx Navigatore WWW in modalit testo mail Invia e riceve posta man Legge le pagine man mcopy Copia file MSDOS verso da Unix mdir Mostra una directory MSDOS memusage Mostra l utilizzo della memoria Glossario 181 memusagestat Mostra le statistiche dell utilizzo della memoria mesg Controlla l accesso in scrittura al vostro terminale mformat Aggiunge un file system MSDOS ad un floppy disk formattato a basso livello mkbootdisk Crea un floppy di avvio autosufficiente ad avviare il sistema mkdir Crea directory mkisofs Crea un filesystem ibrido ISO9660 more Filtro per mostrare del testo una schermata per volta mount Monta un file system oppure mostra informazioni sui file system montati mozilla Navigatore di rete mt Controlla le operazioni dell unit a nastro magnetico mtr Strumento di diagnosi della rete mv Glossario 182 Rinomina file N named Server dei nomi di dominio Internet ncftp Programma di navigazione per servizi ftp non sicuro netstat Stampa connessioni di rete tabelle di instradamento statistiche d interfaccia connessioni mascherate e appartenenze a multitrasmissioni nfsstat Stampa statistiche sui file system in rete nice Avvia un programma con priorit di esecuzione modificata nmap Strumento di esplorazione della rete e scanditore di sicurezza ntsysv Semplice interfaccia per configurare i livelli di avvio P passwd
55. in cui potrete conservare le Capitolo 11 Funzioni 160 definizioni delle funzioni Mettete una coppia di funzioni in quella directory Potrebbero essere utili funzioni tra le altre che voi abbiate gli stessi comandi in un DOS o in uno UNIX commerciale quando state lavorando con Linux o viceversa Queste funzioni dovrebbero poi essere importate nel vostro ambiente di shell quando viene letto bashrc Capitolo 11 Funzioni 161 Capitolo 12 Cattura dei segnali In questo capitolo tratteremo gli argomenti seguenti Segnali disponibili Uso dei segnali Uso dell istruzione trap Come impedire agli utenti l interruzione dei vostri programmi 12 1 Segnali 12 1 1 Introduzione 12 1 1 1 Trovare la pagina man dei segnali Il vostro sistema contiene una pagina man che elenca tutti i segnali disponibili ma in base al vostro sistema operativo potrebbe essere apribile in modo differente In molti sistemi Linux ci potrebbe essere man 7 signal In caso di dubbio localizzate le esatte pagina man e sezione utilizzando comandi come man k signal grep list apropos signal grep list I nomi dei segnali si possono trovare utilizzando kill l 12 1 1 2 Segnali alla vostra shell Bash In assenza di qualsiasi intercettazione una shell interattiva Bash ignora SIGTERM e SIGQUIT SIGINT viene intercettato e gestito e se il controllo del lavori job attivo pure SIGTTIN SIGTTOU e SIGSTOP sono ignorati Ign
56. la stessa cosa di echo N Il costrutto che segue consente la creazione della nominata variabile se essa non esiste ancora VAR valore Esempio franky gt echo FRANKY franky gt echo FRANKY Franky Franky Comunque i parametri speciali tra gli altri i parametri posizionali possono non essere assegnati in questo modo Capitolo 3 L ambiente di Bash 63 Pi avanti discuteremo dell uso delle parentesi tonde curly braces per il trattamento delle variabili nel Capitolo 10 Maggiori informazioni si possono trovare nelle pagine info di Bash 3 4 5 La sostituzione dei comandi La sostituzione dei comandi permette al risultato di un comando di sostituire il comando stesso La sostituzione dei comandi avviene quando un comando cos definito comando oppure come questo ricorrendo agli apici inversi backticks comando Bash effettua l espansione eseguendo COMANDO e rimpiazzando la sostituzione dei comandi con lo standard output del comando con cancellazione di qualsiasi nuovalinea newline presente Le nuovalinea incorporate non vengono cancellate ma potrebbero essere rimosse durante la scomposizione delle parole word splitting franky gt echo date gio teo o 1006 20 Cr Z200 Quando si utilizza la forma di sostituzione ad apici inversi vecchio stile la barra inversa mantiene il suo significato letterale eccetto quando seguita da o I primi apici inversi non preceduti
57. le variabili vengono aggiunte ad una matrice interna contiene il numero totale dei parametri come viene dimostrato con questo semplice script bin bash positional sh Questo script legge 3 parametri posizionali e li stampa POSPAR1 1 POSPAR2 2 POSPAR3 3 echo 1 il primo parametro posizionale 1 echo 2 il secondo parametro posizionale 2 echo 3 il terzo parametro posizionale 3 echo echo Il numero totale di parametri posizionali Con l esecuzione uno potrebbe dare un qualsiasi numero di argomenti franky gt positional sh uno due tre quattro cinque uno il primo parametro posizionale 1 due il secondo parametro posizionale 2 tre il terzo parametro posizionale 3 Il numero totale di parametri posizionali 5 franky gt positional sh uno due uno il primo parametro posizionale 1 due il secondo parametro posizionale 2 il terzo parametro posizionale 3 Il numero totale di parametri posizionali 2 Di pi sulla valutazione di questi parametri nel Capitolo 7 e nella Sezione 9 7 Alcuni esempi sugli altri parametri speciali franky gt grep dictionary usr share dict words dictionary Capitolo 3 L ambiente di Bash 57 franky gt echo _ usr share dict words franky gt echo 10662 franky gt mozilla amp I LOSA franky gt echo 11064 franky gt echo 0 bash franky gt echo 0 frank
58. nere nizze nere neoznece 119 8 2 2 Richieste di immissione dati dagli Utenti 120 8 2 3 Redirezione e descrittori dei Fe rino rara 122 8 2 4 Immissioni ed emissioni di file 124 8 3 SOMMATO anna e e Nn 129 84 ESCI alata AR AIA AIA A A REER 129 Capitolo 9 Compiti TipellliVi furba rallo ai 131 o BAN O a E AE E AE EE A A EE EE 131 IC Come tun iona mestre E E E R O EEE T EE 131 9 1 2 Esempi ae 131 S2 1eceinhile sleilielilae leleine 133 o A EN E anali 133 o PAA A n nI IEEE E E E E TATA 133 O MoAA Kereog aiT ai PEA EE EEA EAE NEE EN EP ES eat 136 93 1 COS E laicale ia 136 9 3 2 ESe mpl Oscco ea e eea E ES o RE E a e A EE 136 9 4 La redirezione dell O 1cich carl lib ali 137 9 4 1 Redirezione dell immissione ironiche lilla aan 137 94 2 Redire io dell emissione silicio 137 9 5 Break Contea i 138 9 51 Lintegrato Dica eee lariana 138 9 5 2 Lintegrato contiene tiara 139 953 AEn n I EE ira ara a LL an 139 9 6 Creazione di menu con l integrato SElECt sorererrrrererrrrerere nere econo seen ceceno rece nio recinzione 140 9 6 1 In generalen nist lia 140 9 6 2 SOttOoMEenU i A tant 142 inesatta 142 SP AlsCheeosttia atea calette 142 972 In EEEE T ria 142 o a AoAo B a p e tt 1o PAE E EE E E E ETE anca 144 S Bo TE A E EE A A RR RT AR 144 Capitolo 10 Di pi sulle vaitabili areale lana ai 146 10 1 Tipi di ya abili helena leale 146 10 1 1 Assegnamen
59. nomi un demone della gestione dell alimentazione e cos via per ogni scelta l utente possa fare stampi alcune informazioni sensibili come il nome del web server le informazioni NTP del tracciamento e cos via predisponiate la facolt per gli utenti di controllare altri server oltre quello Capitolo 9 Compiti ripetitivi 142 elencato Per tali casi controllate che almeno il processo indicato stia funzionando rivediate lo script della Sezione 9 2 2 4 Notate come l immissione dei caratteri diversi da q venga elaborata Ricostruite questo script in modo che stampi un messaggio se vengono forniti dei caratteri come immissione Capitolo 9 Compiti ripetitivi 143 Capitolo 10 Di pi sulle variabili In questo capitolo tratteremo l uso avanzato delle variabili e degli argomenti Al completamento sarete in grado di dichiarare e usare una matrice di variabili specificare il tipo di variabile che desiderate utilizzare creare variabili a sola lettura usare set per assegnare un valore ad una variabile 10 1 Tipi di variabili 10 1 1 Assegnamento di valori in generale Come abbiamo visto Bash comprende molti tipi diversi di variabili o parametri Finora non ci siamo interessato molto a quale genere di variabile abbiamo assegnato cosicch le nostre variabili potrebbero contenere qualsiasi valore assegnato loro Un semplice esempio a linea di comando dimostra ci bob in VARIABILE 12
60. of the author Machtelt Garrels nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED IN NO EVENT SHALL THE AUTHOR AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT INDIRECT INCIDENTAL SPECIAL EXEMPLARY OR CONSEQUENTIAL DAMAGES INCLUDING BUT NOT LIMITED TO PROCUREME ORNSUBSTIESrRU TEMO DSMORESERVICHS LOSS OF USE DATA OR PROFITS OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY WHETHER IN CONTRACT STRICT LIABILITY OR TORT INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE EVE CERAPVWISEDROER CHER EOS IBIRERINZOERSUCHEDAMAGER Gees e e inollec eo deco e e e e E e e a e e L autrice e l editore hanno fatto ogni sforzo nella preparazione di questo libro per assicurare l accuratezza delle informazioni Tuttavia le informazioni contenute in questo libro sono offerte senza garanzia si
61. oppure se capita qualche altro errore L istruzione exit accetta un argomento opzionale Questo argomento il codice in numero intero del lo stato di uscita che viene restituito al genitore e conservato nella variabile Un argomento zero significa che lo script ha funzionato con successo Qualsiasi altro valore pu essere usato dai programmatori per restituire messaggi differenti al processo genitore in modo che possono essere intraprese azioni diverse in base al fallimento o al successo del processo figlio Se non viene dato alcun argomento al comando exit la shell genitrice utilizza il valore corrente della variabile Di seguito c un esempio con lo script pinguino sh leggermente adattato che restituisce il suo codice di uscita al genitore cibo sh anny testdir gt cat pinguino sh bin bash Questo script ti lascia presentare diversi menu a Tux Lui sar felice solo quando gli sar dato pesce Abbiamo aggiunto anche un delfino presumibilmente un cammello if Smenu pesce then 1f Sanimale pinguino then echo Hmmmmmm pesce Tux felice elif Sanimale delfino then echo Pweetpeettreetppeterdepweet else SEROR APE ERELTI E Ei else if Sanimale pinguino then echo A Tux non piace quello Tux vuole pesce exit 1 elif animale delfino then echo Pweepwishpeeterdepweet exit 2 else cho Leggerai questo segno exit 3
62. ora di sistema dd converte e copia un file disk dump df Riferisce l uso dei dischi del file system dhcpd Demone del cliente DHCP diff Trova le differenze tra due file dmesg Stampa o controlla il buffer ad anello del kernel du Valuta l uso dello spazio dei file echo Mostra una linea di testo ediff Il diff del traduttere inglese Glossario 175 egrep grep esteso eject Smonta ed espelle supporti removibili emacs Avvio dell editor Emacs exec Invoca sottoprocessi exit Uscita dalla shell corrente export Aggiunge funzioni all ambiente della shell F fax2ps Converte un facsimile TIFF in PostScript fdformat Formatta floppy disk fdisk Gestore delle tabelle delle partizioni sotto Linux fetchmail raccoglie la posta da server POP IMAP ETRN o ODMR compatibile fg Glossario 176 Porta un lavoro in primo piano file Stabilisce il tipo di file find Trova file formail Ri Formattatore di posta fortune Stampa un casuale e si spera interessante adagio ftp Servizi di trasferimento file non sicuri a meno che non venga utilizzato un account anonimo G galeon Navigatore internet grafico gdm Gnome Display Manager min a getty Controlla le unit di console gimp Programma di manipolazione delle immagini grep Stampe linee che corrispondono ad un modello Glossario 177 grub La shell di grub gv Un visualizzatore PostScript e PDF gzip Comprime o
63. parentesi un elenco di caratteri racchiusi tra e Essa confronta ogni singolo carattere di quella lista se il primo carattere dell elenco l accento circonflesso allora comparer qualsiasi carattere NON presente in esso Per esempio l espressione regolare 0123456789 confronta ogni singola cifra All interno di un espressione tra parentesi una espressione di intervallo formata da due caratteri separati da un trattino Essa fa corrispondere ogni singolo carattere compreso tra i due caratteri non esclusi utilizzando la sequenza di confronto e l insieme dei caratteri del singolo sistema Per esempio nello specifico ambiente C a d equivalente a abcd Molti ambienti ordinano i caratteri secondo l ordine del dizionario e in questi ambienti a d normalmente non equivale a abcd per esempio potrebbe essere equivalente a AaBbCcDd Per ottenere l interpretazione tradizionale delle espressioni regolari potete usare l ambiente C impostando la variabile ambientale LC_ALL con il valore C Infine certe classi denominate di caratteri sono predefinite all interno delle espressioni tra parentesi Vedete il man di grep o le pagine info per maggiori informazioni su tali espressioni predefinite cathy gt grep yf etc group SMISE 0 Ran CESK mail x 12 mail postfix fa PEER Capitolo 4 Le espressioni regolari 76 MOLOI ENII TOPOV AARO KESRO nfsnobody x 65534 Rosario 98 Nell esempio vengono mostrate
64. possono mettere molteplici comandi di sed in un file ed eseguirli utilizzando l opzione f Quando create un tale file assicuratevi che e Non vi siano spazi bianchi al termine della linea e non vengano utilizzati apici Capitolo 5 L editor di flussi GNU sed 84 e quando si aggiunge o sostituisce un testo tutte tranne l ultima le linee finiscano con una barra inversa 5 3 2 Scrittura dei file dei dati in uscita La scrittura dei dati in uscita output si esegue utilizzando l operatore di redirezione di uscita gt Questo uno script di esempio usato per creare dei file molto semplici in HTML da normali file di testo sandy gt cat script sed Lay lt htm1 gt lt head gt lt title gt html generato da sed lt title gt lt head gt lt body bgcolor ffffff gt lt pre gt a lt pre gt lt body gt lt html gt sandy gt cat txt2html sh bin bash Questo un semplice script che potete usare per convertire testi in HTML Primo togliamo tutti i caratteri di nuovalinea in modo che avvenga solo una volta l aggiunta poi sostituiamo i nuovelinea echon Conyers onen MEN SCRIPT home sandy scripts script sed NAME 1 TEMPFILE var tmp sed PID tmp sec Us a R Si sec S CRTE SE N a ST EMEETIEE mv STEMPFILE NAME CERO naso sandy gt 1 contiene il primo argomento di un dato comando in questo caso il nome de
65. rispecchiare la modifica Il parametro posizionale 0 non viene modificato La variabile di Bash FUNCNAME impostata con il nome del FUNCNAME della funzione durante la sua esecuzione Se l integrato return viene eseguito in una funzione la funzione si completa e riprende l esecuzione con il comando successivo alla chiamata della funzione Quando si conclude una funzione il valore dei parametri posizionali e il parametro speciale vengono riportati ai valori che avevano prima dell esecuzione della funzione Se viene attribuito un argomento numerico a return viene restituito quello stato Un semplice esempio lydia cointreau test cat mostraparam sh bin bash echo Questo script mostra gli argomenti delle funzioni echo echo Parametro posizionale 1 dello script 1 echo test echo Parametro posizionale 1 nella funzione 1 VALORE_RITORNO 5 echo Il codice di uscita di questa funzione VALORE_RITORNO test altro_param lydia cointreau test mostraparam sh parametrol Questo script mostra gli argomenti delle funzioni Capitolo 11 Funzioni 156 Parametro posizionale 1 dello script parametrol Parametro posizionale 1 nella funzione altro_param Il codice di uscita di questa funzione 0 lydia cointreau test Notate che il valore di ritorno o il codice d uscita della funzione sono spesso conservati in una variabile cosicch questa pu essere interrogata in un punto success
66. root root 17 Oct 2 07 46 dev stderr gt proc self d 2 lrwxrwxrwx 1 root root 17 Oct 2 07 46 dev stdin gt proc self d 0 lrwxrwxrwx 1 root root 17 Oct 2 07 46 dev stdout gt proc self fd 1 michel gt ls l proc self d 0 2 ILiswpre o I michal michel 64 Jem 23 IMI foroc seti Erco caos lryz Il miekhel michel G4 Jen 23 12311 oroc seli ici gt ay iges 6 lLiwe I michal michel 64 Jem 29 12411 oroc Seli iC 2 gt CEVAT Notate che ciascun processo ha la propria visione dei file sotto proc se1lf che in realt un collegamento simbolico a proc lt ID_processo gt Vi potrebbe tornare interessante provare info MAKEDEV e info proc per maggiori informazioni sulle sottodirectory proc ed il modo in cui il vostro sistema gestisce i descrittori di file standard per ciascun processo in funzione Quando si esegue un dato comando vengono percorse le seguenti fasi nell ordine e Se l emissione standard standard output di un precedente comando stata incanalata nell immissione standard standard input del comando corrente allora proc lt ID_processo_corrente gt d 0 viene aggiornato per diretto verso lo stesso incanalamento anonimo come proc lt ID_processo_precedente gt f d 1 e Se l emissione standard del comando corrente viene incanalata verso l immissione standard del comando successivo allora proc lt ID_processo_corrente gt f fd 1 viene aggiornato per e
67. se nessuno stato eseguito 9 2 2 Esempi 9 2 2 1 Semplice esempio di utilizzo di while Qui c un esempio per gli impazienti bin bash Questo script apre 4 finestre di terminale i 0 imiaalile f Si dhe 4 do xterm amp T SS S 1 done 9 2 2 2 Cicli while annidati L esempio sottostante stato scritto per copiare in una directory web delle immagini che erano state realizzate con una webcam Ogni cinque minuti viene scattata una foto Ogni ora viene creata una nuova directory contenente le immagini di quell ora Ogni giorno viene creata una nuova directory contenente 24 sottodirectory Lo script gira dietro le quinte bin bash Questo script copia file dalla mia directory home a quella del webserver usa scp e le chiavi SSH per una directory remota Viene creata una nuova ogni ora Capitolo 9 Compiti ripetitivi 131 PICSDIR home carol pics WEBDIR var www carol webcam while true do DATA date 5YSm d ORA date 5H mkdir SWEBDIR SDATA maglite SORA sane U00 e do ESTDIR WEBDIR S DATA SORA Reblie Sissa vw SRICIDIIR gt Joe VIDI IDR leep 3600 RA date H Qang done done Osservate l uso dell istruzione true Significa questo continua l esecuzione finch non veniamo interrotti con la forza con kill o Ctrl C Questo piccolo script pu essere utilizzato per effettuare una simulazione esso genera file bin
68. source file o file file source file Lettura di comandi in file IL P z i Il nome x sta per il alias x y alias x y alias x y comando y case case case switch o case Scelta tra alternative Termine di istruzione di done done done end ciclo esac esac esac endsw Termine di case o switch exit n exit n exit n exit espr Uscita con stato Ciclo per mezzo di for do for do for do foreach pe variabili set f set o Ignora i caratteri di nullglob dotglob noglob sostituzione nella nocaseglob noglob generazione dei nomi Mostra i comandi con hash hash alias t hashstat nn cancelletto alias tracciati alias t Ricorda la posizione dei hash cmds hash cmds rehash A P cmds comandi haiez Pher dahasi Dimentica la posizione dei comandi Appendice A Caratteristiche della shell 170 sh bash ksh csh Significato Azione i A Elenca i comandi history history history preceden FrecciaSu Invio o r RI uiimo Ripetizione ultimo Istr r str Istr comando che inizia per str Sostituzione di x con y nel comando pi recente lemd s x y r x y cmd cmd s x y che iniziiper i quando eseguito if i Sepis ba ia i i Saed if i eq 5 if i 5 if 1 5 Test condizioni d esempio fi fi fi endif Fine istruzione if KI LAS vi a Imposta i limiti delle ulimit ulimit ulimit limit ra x Stampa la directory in pwd pwd pwd dirs Resa y read read read lt Legge da terminal
69. stringa nulla La linea letta viene salvata nella variabile REPLY I COMANDI RELATIVI vengono eseguiti dopo ciascuna selezione fino a che non viene letto il numero che rappresenta il break Questo interrompe il ciclo 9 6 1 2 Esempi Questo un esempio molto semplice ma come potete vedere non molto alla portata degli utenti carol octarine testdir cat private sh bin bash echo Questo script pu rendere privato qualunque file di questa directory echo Inserisci il numero del file che desiderate proteggere SCIE O MES TER do CIEROMME GSC ORSNOMEEERFAR SREPINAMN O races chmod go rwx SNOMEFILE done carol octarine testdir private sh Questo script pu rendere privato qualunque file di questa directory Inserisci il numero del file che desiderate protegger 1 archivio 20030129 2 bash 3 privato sh DIL Hai SCelro erechiyio 20030129 L DI Impostare l invito PS3 ed aggiungere una possibilit per terminare lo rende migliore bin bash echo Questo script can pu fare rendere privato qualunque file di questa directory echo Inserisci il numero del file che intendi proteggere PS3 La tua scelta ABBANDONO TERMINA QUESTO PROGRAMMA Ora miu sento sicuro touch SABBANDONO select NOMEFILE in do case SNOMEFILE in SABBANDONO echo Uscita break Capitolo 9 Compiti ripetitivi 139
70. tutte le linee contenenti o un carattere y o f 4 2 2 3 Metacaratteri wildcard Usate il per la corrispondenza di un solo carattere Se volete ottenere un elenco di tutte le parole ia del dizionario inglese che iniziano per c e terminano con h utile per risolvere parole incrociate cathy gt grep lt c h gt usr share dict words Colin clas clot coac couc coug cras Crus a DT DI DI 4DI DT DI Se volete mostrare le linee contenenti il carattere letterale punto usate l opzione F con grep Per comparare molteplici caratteri usate l asterisco Questo esempio seleziona tutte le parole che I iniziano con c e terminano con h nel dizionario di sistema cathy gt grep lt c h gt usr share dict words caliph cash catch cheesecloth cheetah 0oUEpultronesso Se desiderate trovare il carattere letterale asterisco in un file o nei dati in uscita usate degli apici singoli Nell esempio seguente Cathy prima prova a trovare il carattere asterisco in etc profile senza usare gli apici cosa che non restituisce alcuna linea Usando gli apici viene prodotto un risultato cathy gt grep etc profile cathy gt grep etc profile for i in etc profile d sh do 4 3 Comparazione dei modelli utilizzando le funzionalit di Bash 4 3 1 Intervalli dei caratteri A parte grep e le espressioni regolari ci sono molte comparazioni di modelli che potete eseguire d
71. una qualunque meritevole correzione degli errori Quando si redirigono gli errori prestate attenzione che l ordine di precedenza significativo Per esempio questo comando fornito in var spool ls 1 2 gt var tmp inaccessibile in spool Capitolo 8 Redigere script interattivi 121 rediriger l emissione standard del comando ls verso il file inaccessibile in spool in var tmp Il comando ls 1 gt var tmp listaspool 2 gt amp 1 diriger sia immissione che errori standard verso il file 1listaspoo1 Il comando ls 1 2 gt amp 1 gt var tmp listaspool dirige solo l emissione standard verso il file di destinazione perch l errore standard viene copiato nell emissione standard prima che questa sia rediretta Per comodit spesso gli errori vengono rediretti verso dev nul1l se certo che non servano Si possono trovare centinaia di esempi nei file di avvio del vostro sistema Bash permette sia all emissione standard che all errore standard di essere rediretti verso il file il cui nome il risultato dell espansione di FILE con questo costrutto amp gt FILE Ci l equivalente di gt FILE 2 gt amp 1 il costrutto usato nel precedente complesso di esempi Esso spesso viene combinato anche con la redirezione verso dev nul1l per esempio quando volete solo eseguire un comando non importa quali emissioni o errori dia 8 2 4 Immissioni ed emissioni di file 8 2 4 1 Uso di dev fd La directory c c
72. 00 file do Gaio Veio uv Usialle 93 USDESIDINa echo file archived done I file vengono compressi priva di spostarli nella directory di archiviazione Capitolo 9 Compiti ripetitivi 135 9 5 Break e continue 9 5 1 L integrato break L istruzione break si usa per uscire dal ciclo in corso prima del suo termine normale Ci si fa quando non conoscete in anticipo quante vole il ciclo dovr essere eseguito per esempio perch dipende dall immissione dell utente L esempio sottostante mostra un ciclo while che pu essere interrotto Questa una versione leggermente migliorata dello script saggezza sh della Sezione 9 2 2 3 bin bash Questo script distribuisce saggezza Ora puoi uscire in maniera decente FORTUNE usr games fortune while true do echo In che materia vuoi consigli acho Mio olii echo 2 startrek echo 3 kernelnewbies echo 4 sport echo 5 bofh excuses echo 6 magia echo 7 amore echo 8 letteratura echo 9 droghe echo 10 educazione echo clio n Unire oitua celta WU read scelta echo case choice in 1 S FORTUNE politica ii 2 FORTUNE startrek ii 3 SFORTUNE kernelnewbies ii 4 echo Gli sport sono uno spreco di tempo energia denaro echo Torna alla tua tastiera echo e t t t t Malaticcio il mio secondo nome Soggie ii 5 FORTUNE bofh excuses ii 6 S FORTUNE magia ii 7 F
73. 1 VAR2 e VAR3 inizializzatele per tenere rispettivamente i valori tredici 13 e Buon compleanno Mostrate i valori di tutte tre le variabili Queste sono variabili locali o globali Rimuovete VAR3 Potete vedere le restanti due variabili in una nuova finestra di terminale Modificate etc profile in modo che tutti gli utenti vengano salutati al momento della autenticazione provate questo Per l account root impostate l invito con qualcosa come Pericolo root sta facendo cose in w preferibilmente in un colore vivace come il rosso o rosa oppure in modalit video invertito Accertatevi che anche gli utenti appena creati abbiano un invito personalizzato carino che li informi su quale directory di quale sistema stiano lavorando Sperimentate le vostre modifiche aggiungendo un nuovo utente ed autenticandovi come quello Scrivete uno script in cui assegnate due valori interi a due variabili Lo script dovrebbe calcolare la superficie di un rettangolo che ha queste misure Dovrebbe essere corredato di commenti e generare dei risultati eleganti Non scordatevi di applicare chmod ai vostri script Capitolo 3 L ambiente di Bash 72 Capitolo 4 Le espressioni regolari In questo capitolo discutiamo di uso delle espressioni regolari metacaratteri delle espressioni regolari ricerca di schemi in file o dati in uscita intervalli e classi di caratteri in Bash 4 1 Espressioni regolari 4 1 1 Cosa sono le es
74. 2 4 2 Variabili riservate di Bash Queste variabili sono definite od utilizzate da Bash ma altre shell normalmente non le trattano in modo speciale Tabella 3 2 Variabili riservate di Bash Nome della variabile Definizione Questa variabile controlla come la shell interagisce con l utente ed il auto_resume Li lai controllo dei job L intero nome del percorso utilizzato per eseguire la corrente richiesta BASH di Bash Se questa variabile definita quando Bash viene invocato per eseguire BASH_ENV uno script di shell il suo valore viene espanso ed impiegato quale nome di un file di avvio da leggere prima dell esecuzione dello script BASH_VERSION Il numero di versione della istanza corrente di Bash Una variabile matriciale a sola lettura i cui elementi contengono le BASH_VERSINFO NE i informazioni di versione per questa istanza di Bash Utilizzata dall integrato select per determinare la larghezza del COLUMS terminale quando si stampano elenchi di selezione Impostata automaticamente in base alla ricezione di un segnale SIGWINCH Un indice all interno di COMP_WORDS della parola contenente COMP_CWORD za l attuale posizione del cursore COMP_LINE La corrente linea di comando L indice dell attuale posizione del cursore relativa all inizio della COMP_POINT f corrente linea di comando Una variabile matriciale che consiste nelle singole parole nella corr
75. 3 Sezione 8 2 4 1 divisione delle parole Sezione 3 4 9 double quotes Sezione 3 3 4 E echo Sezione 1 5 5 Sezione 2 1 2 Sezione 2 3 2 Sezione 8 1 2 editors Sezione 2 1 1 else Sezione 7 2 1 emacs Sezione 2 1 1 emissione standard Sezione 8 2 3 1 env Sezione 3 2 1 1 errore standard Sezione 8 2 3 1 esac Sezione 7 2 5 escape caratteri Sezione 3 3 2 escape sequenze Sezione 8 1 2 esecuzione Sezione 2 1 3 espansione dei nomi dei file Sezione 3 4 9 espansione dei parametri Sezione 3 4 5 espansione delle parentesi Sezione 3 4 3 espansione delle variabili Sezione 3 4 5 espressioni combinate Sezione 7 1 1 1 Indice espressioni primarie Sezione 7 1 1 1 espressioni regolari Sezione 4 1 espressioni regolari estese Sezione 4 1 3 etc bashrc Sezione 3 1 1 2 letc passwd Sezione 1 1 2 etc profile Sezione 3 1 1 etc shells Sezione 1 1 2 exec Sezione 1 3 1 Sezione 8 2 4 2 execute permissions Sezione 2 1 3 execution Sezione 2 1 3 exit Sezione 7 2 5 exit status Sezione 7 1 2 1 espansione Sezione 1 4 1 5 Sezione 3 4 export Sezione 3 2 3 extended regular expressions Sezione 4 1 3 F file descriptors Sezione 8 2 3 Sezione 8 2 4 1 file di inizializzazione Sezione 3 1 file name expansion Sezione 3 4 9 find and replace Sezione 5 2 4 flusso logico Sezione 1 5 4 for Sezione 9 1 fork Sezione 1 3 1 funzioni Sezione 11 1 1 193 G gawk Sezion
76. 3 1 2 3 profile In assenza di bash_profile e di bash_login viene letto profile Pu tenere le stesse configurazioni che poi sono accessibili anche dalle altre shell Ricordatevi che altre shell potrebbero non comprendere la sintassi di Bash 3 1 2 4 bashrc Oggi pi frequente utilizzare una shell senza autenticazione per esempio quando ci si autenticati in ambiente grafico utilizzando le finestre del terminale di X Una volta aperta una tale finestra l utente non deve fornire un nome utente o una password non viene fatta nessuna autenticazione Quando ci accade Bash cerca bashrc a cui si fa riferimento nei file letti al momento dell autenticazione il che significa che non dovete inserire le stesse impostazioni in molteplici file In questo bashrc di utente una coppia di alias viene definita e vengono determinate delle variabili per specifici programmi dopo la lettura di etc bashrc dell intero sistema franky gt cat bashrc home franky bashrc Capitolo 3 L ambiente di Bash 45 Source global definitions if f Xete bashre then etc bashrc shell options set o noclobber my shell variables export PS1 033 1 44m u w 033 0m _ export PATH SPATH bin scripts my aliases alias cdrecord cdrecord dev 0 0 0 speed 8 alias ss ssh octarine alias Il ls la mozilla Pas MOZIL
77. 4 3 Espansione della 11146 achille 62 3 4 4 I parametri della shell e l espansione delle variabili 63 3 4 5 La sostituzione dei comandi aprile 64 3 4 6 Espansione alHmelica a nilo iaia 65 3 4 7 Sostituzione dei process alal ea 66 3 4 8 Scomposizione delle parol6 s eee 67 3 4 9 Espansione del nome dei file a prata lia iaia 67 PAL locale eee lee 68 SaliCosa sonoslhallas sante allea 68 3 5 2 Creazione e rimozione depli allas icra elia 69 3 6 Ulteriori opzioni di Bashup s en lado 70 936 1 Opzioni di visualizzazione airplane ana Rua 70 3 6 2 Opzioni dimise lai 70 AO RR RR E 71 L0rEStCz Lira aaa laica o 72 Capitolo 4 Le espressioni repplati illa lei doti 73 4 1 Espressioni PESO LATE crt nr a 73 4 1 1 Cosa sono le espressioni regolari srercrrrrererereece resero eeeze nere esere see ee erica reo ricereonece 73 4 1 2 I metacaratteri delle espressioni regolari sessesessesesessssessesseeseersreseesrerseeserssreseesees 73 4 1 3 Espressioni regolari elementari contro Estese iii 74 4 2 Esempi di tilizzo di prepara aaea a A A Lella 74 4 21 COS E prep LE SAIL RL 74 4 2 2 Grep e le espressioni regolari vessrercrerreresereceeie sere rinze nere cene nere renze nice sioreni canzone 75 4 3 Comparazione dei modelli utilizzando le funzionalit di Bash i 77 4 51 Intervalli dei caratte rile a e a a 77 4 3 2 Classi di Cire
78. ASE1 LISTA COMANDI CASE2 LISTA COMANDI CASEN LISTA COMANDI esac Ogni case un espressione che corrisponde ad un modello I comandi in LISTA COMANDI per la prima coincidenza vengono eseguiti Si usa il simbolo per separare molteplici modelli e l operatore termina un elenco di modelli pattern list Ciascun case e i suoi relativi comandi vengono definiti clausola clause Ogni clausola va terminata con Tutte le istruzioni case terminano con l istruzione esac Nell esempio dimostriamo l uso dei case per inviare un messaggio di avvertimento pi selettivo con lo script disktest sh anny testdir gt cat disktest sh bin bash Questo script effettua un test molto semplice per verificare lo spazio su disco spazio che Amankan prine SS paso E ciao vv Use sost Da adi ci ene Gi Sl EL case spazio in 1 61 Messaggio Tutto tranquillo ET ESI Messaggio Inizia a pensare di cancellare qualcosa C una partizione piena per SODELO as iF S S Capitolo 7 Istruzioni condizionali 110 Messaggio Meglio sbrigarsi con quel nuovo disco Una partizione piena al spazio o n Oh ii 99 Messaggio Qui mi sommergono C una partizione a spazio 5 Dari 3 Messaggio Mi sembra di funzionare con una quantit inesistente di spazio su disco Er T esac echo Messaggio mail s rapporto dischi i adate n anny anny testdir gt You have new mail anny tes
79. FT 1 GDMSESSION Default GNOME _DESKTOP_SESSION_ID Default GTK_RC_FILES etc gtk gtkrc nethome franky gtkrc 1 2 gnome2 GNMCOLOR darkgreen GWMTERM xterm HISTFILESIZE 5000 history_control ignoredups HISTSIZE 2000 HOME nethome franky HOSTNAME octarine hg garrels be INPUTRC etc inputrc IRCNAME franky JAVA_HOME usr java j2sdk1 4 0 LANG en_US DF LAGS s D_LIBRARY_PATH usr lib mozilla usr lib mozilla plugins LESSCHARSET latinl LESS edfMQ LESSOPEN usr bin lesspipe sh s LEX flex LOCAL MACHINE octarine Capitolo 3 L ambiente di Bash 48 LOGNAME franky S_COLORS n0 00 fi 00 di 01 34 1n 01 36 pi 40 33 s0 01 35 bd 40 33 01 cd 40 33 01 or 01 05 37 41 MACHINES octarine MAILCHECK 60 MAIL var mail franky MANPATH usr man usr share man usr local man usr X11R6 man MEAN _MACHINES octarine MOZ_DIST_BIN usr lib mozilla MOZILLA FIVE_HOME usr lib mozilla MOZ_PROGRAM usr lib mozilla mozilla bin MTOOLS_FAT_COMPATIBILITY 1 MYMALLOC 0 NNTPPORT 119 NNTPSERVER news NPX_PLUGIN_PATH plugin ns4plugin usr lib netscape plugins OLDPWD nethome franky OS Linux PAGER less PATH nethome franky bin Linux nethome franky bin usr local bin usr local sbi n usr X11R6 bin PS1 033 1 44m franky is in w 033 0m PS2 More input gt PWD nethome franky SESSION _MANAGER local octarine hq garrels be tmp ICE unix 22106
80. I rire 93 6 3 2 I separatori di emissione nilo 94 6 3 3 Ilmumero di reconditi 95 6 3 4 Variabili definite dall UTENtE verertrerrrcrercerereeie nere niene nere seee nere rione e ezio reni zioiennee 96 boia Ulienorzesempi anulare alri 96 6 3 6 Il programma printer lele i elia leali 97 09a eLo Mido iaia 97 ODA SI tI RIVA RE RA RARA RR AERAZIONE 98 Capitolo 7 Istruzioni condizionali opere ioni ea 100 7 1 Introd zio e ddl lla aaa 100 ZAM IngeneralE ti lilla 100 7 1 2 Semplici applicazioni dll 103 T2 Usodirif PICAVANZI Osella atea 105 72 GOstruttrit theniels eri EA RRR 105 7 2 2 L COSTEUtIILeN Clse stitr alienare 109 7 23 lstt ioni if anali lean 110 7 24 Opera i ni booleane ssp ilaria 110 7 2 5 Uso dell istruzione exit eif areale lella ai 111 7 3 Usodelleistr ioni CASE RAIDER a 112 7 3 1 Condizioni semplificate c iscsairi iraniana ir 112 Z2 Esempio di DSi lari 113 TA SOMMATO o ear ra e E E E i 114 TA D R E VA AET E EE E E RO ET 114 Capitolo 8 Schivere sehpl inferaVi ella bi iaia 116 8 1 Presentare dei messaggi per gli Utenti corercrrrrerecere renze nere neeze nere sieze nere renze nere ninzoneee 116 8 1 1 Interattivi 0 MENO sionis iaia 116 8 1 2 Uso del comando integrato echo illo 117 8 2 Cattura dell immissione dell Utente iii eee eee eee eee eee eee 119 8 2 1 Uso del comando integrato read eoreretrrrrrererereerererieze serene ese
81. ILESIZE Il numero massimo di linee contenute nel file di cronologia di solito 500 Un elenco suddiviso dai due punti degli schemi utilizzati per HISTIGNORE decidere quali linee di comando debbano essere salvate nella lista della cronologia HISTSIZE Il numero massimo di comandi da ricordare nella lista della cronologia il valore predefinito 500 Contiene il nome di un file nello stesso formato di etc hosts che HOSTFILE dovrebbe essere letto quando la shell ha bisogno di completare un nome di host HOSTNAME Il nome del corrente host HOSTTYPE Una stringa che descrive la macchina in cui sta girando Bash IGNOREEOF Controlla il comportamento della shell quando riceve un carattere EOF come unico ingresso INPUTRC Il nome del file di inizializzazione Readline che prevale sul predefinito etc inputroc Utilizzato per stabilire la categoria delle localizzazioni per tutte quelle LANG categorie non selezionate specificatamente con una variabile che inizia con LC_ L att Questa variabile scavalca il valore di LANG e di ogni altra variabile LC_ che specifica una categoria di localizzazione LC_COLLATE Questa variabile determina l ordine di collazione utilizzato quando si Capitolo 3 L ambiente di Bash 54 riordinano i risultati delle espansioni dei nomi dei file stabilisce il comportamento di espressioni di intervalli range expression
82. L esecuzione di cicli attraverso gli argomenti della linea di comando in uno script pu essere posta in essere utilizzando l istruzione shift 9 9 Esercizi Ricordate quando realizzate script lavorate a passi e provate ogni passo prima di incorporarlo nel vostro script 1 Create uno script che far una copia ricorsiva dei file in etc in modo che un amministratore di sistema principiante possa modificare file senza timori 2 Scrivete uno script che prenda esattamente un argomento un nome di directory Se il numero degli argomenti maggiore o minore di uno stampate un messaggio sull uso Se l argomento non una directory stampate un altro messaggio Della directory indicata stampate i primi cinque file pi grandi e i cinque file che sono stati modificati pi di recente 3 Potete spiegare perch cos importante mettere le variabili tra apici doppi nell esempio della Sezione 9 4 2 4 Scrivete uno script simile a quello in Sezione 9 5 1 ma pensate ad un modo per terminare dopo che l utente ha eseguito 3 cicli 5 Pensate ad una migliore soluzione rispetto a move b per lo script della Sezione 9 5 3 per prevenire la sovrascrittura dei file esistenti Per esempio verificate se un file esiste o meno Non fate lavori inutili 6 Riscrivete lo script qualedemone sh della Sezione 7 5 esercizio n 5 in modo che stampi un elenco dei server da controllare come Apache il server SSH il demone NTP un demone dei
83. LA FIVE_HOME usr lib mozilla LD_LIBRARY_PATH usr lib mozilla usr lib mozilla plugins MOZ_DIST_BIN usr lib mozilla M0OZ_PROGRAM usr lib mozilla mozilla bin export MOZILLA FIVE_HOME LD_LIBRARY_PATH MOZ _DIST_BIN MOZ_PROGRAM font fix alias xt xterm bo black fo white amp BitchX settings export IRCNAME frnk THE END TERI RY Si possono trovare molti esempi nel pacchetto Bash Ricordate che i file campione potrebbero necessitare di modifiche per funzionare nel vostro sistema Gli alias sono trattati nella Sezione 3 5 3 1 2 5 bash_logout Questo file contiene istruzioni specifiche per la procedura di chiusura della sessione logout Nell esempio la finestra di terminale viene cancellata al momento della chiusura della sessione Ci utile per connessioni remote che lasceranno una finestra pulita dopo la loro chiusura franky gt cat bash logout FE HE TE E TE AE TE AE FE AE FE AE FE E FE AE FE AE FE FE FE E HE E HE FE FE FE HE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE FE TE FE TE AE TE E FE FE FE FE FE FE E HE E HE E E H Bash_logout file 4 commands to perform from the bash shell at logout time
84. La guida di Bash per i principianti Machtelt Garrels Garrels BVBA lt tille wants no spam _at_ garrels dot be gt Versione 1 11 Edizione ultimo aggiornamento 20081227 Indice generale nuodizioie iatale ea 7 t Perche desti talea a EE E E TE E a i 7 2 Chi dovrebbe leggere questo libro crr rinite 7 3 Nuove versioni traduzioni e disponibilit rrrrrrrererere sere rieze sere senie nere rizzo rire zieezenicnine 8 4 Cronologia delle revisioli cioe aio 8 SERATA LIRE Eaa AE AE ATE E RIA TO N TOA POR REAR 9 6 RISCO crolli lalla 10 7 INTOTMAZIONE SI diritti irene rinie NI INZA 10 8 Di COSAAVEle BISOGNO Rs oee ie reris an Opa aa Eea aE a EE EE EEA 10 9 Convenzioni utilizzate in questo documento ssesessesesseseesssessesseesresseeseesresseeseresseresseresseress 11 10 Organizzazione di questo documento ssesesseseseeserssreseeserssresressrsseesressesseesseresseeessseesseee 11 Capitolo 1 Bash e gli script di Bash arl ian nadallu tare 13 1 1 Comuni programmi della Shell rsrcsrerrrereeie nere riore nice reeie nere rizzo nici rece ee eee ezio nizenioizene 13 1 1 1 Funzioni peneralidi shell Sorta nsealuie illa euri 13 18 RZ Tpi di shel aereto Tenn e a EER RA EE EE ER 13 1 2 Vantaggi della Bourne Again Shell eosrercrrrrererereeeereseeee nere neene nere siene cere senzeneenieniceneo 14 t2 1Bash la shell GNU atolli tiranni 14 1 2 2 Funzionalit risco
85. La pi comune quella di Capitolo 2 Scrivere e correggere gli script 37 avviare la sottoshell con l opzione x che far girare lo script intero in modalit correzione debug mode Il tracciamento di ogni comando pi i suoi argomenti vengono stampati nella periferica predefinita per l emissione dei dati standard output dopo che i comandi sono stati espansi ma prima della loro esecuzione Questo lo script scriptl commentato sh fatto girare in modalit correzione Notate nuovamente che i commenti aggiunti non sono visibili nei risultati dello script willy scripts gt bash x scriptl sh clear echo Lo script inizia adesso Lo script inizia adesso t edi Ciao willy Gilao wilis echo echo Ora ti invio un elenco degli utenti connessi Ora ti invio un elenco degli utenti connessi echo w 4 50pm up 18 days 6 49 4 users load average 0 58 0 62 0 40 USER APIA FROM LOGIN IDLE JC RU PCPU WHAT root TEYA Sat 2pm Soa 02483 0 058 dgasla willy 0 Sat 2pm 0 00s R Wally pes s Sat 2pm AoA ESC 2 0 6882 ect pnilily pes z Sat 2pm 43 13 0 13s 0 06s usr bin screen echo echo Adesso sto impostando due variabili Adesso sto impostando due variabili COLORE nero VALORE 9 echo Questa una stringa nero Questa una stringa nero echo E questo un numero 9 E questo un numero 9 echo i Gene Via ii restritt seco MAn EO Ora ii m
86. NAME prima dell assegnazione Altri argomenti NAME vengono ignorati Il primo carattere di DELIM viene usato per terminare la linea immessa al d DELIM posto di nuovalinea n readline viene usato per ottenere la linea Capitolo 8 Redigere script interattivi 117 NCHARS read ritorna dopo la lettura dei caratteri NCHARS piuttosto di attendere l intera linea di immissione PROMPT Mostra PROMPT senza nuovalinea in mezzo prima di tentare di leggere qualsiasi immissione L invito prompt viene mostrato solo se l immissione proviene da un terminale Se viene data questa opzione la barra inversa non si comporta come carattere di escape La barra inversa viene considerata appartenente alla linea In particolare una coppia barra inversa nuovalinea potrebbe non essere utilizzata come prosecuzione di linea Modalit silenziosa Se l immissione proviene da un terminale i caratteri non vengono riportati con echo TIMEOUT Determina read ad andare fuori tempo massimo e a restituire un fallimento se non stata letta una linea intera entro i secondi di TIMEOUT Tale opzione non ha effetti se read non sta leggendo immissioni da terminale o da un incanalamento pipe Legge immissioni dal descrittore di file FD Questo un chiaro esempio che migliora lo script provabisestile sh del precedente capitolo michel test gt cat leaptest sh bin bash
87. ORTUNE amore ii 8 SFORTUNE letteratura ii 2 SFORTUNE droghe Capitolo 9 Compiti ripetitivi 136 ii 10 SFORTUNE educazione ii 0 echo OK arrivederci break Dar S echo Quella non una scelta valida prova un numero da 0 a 10 ii esac done Ricordatevi che break interrompe il ciclo non lo script Ci si pu dimostrare aggiungendo un comando echo al termine dello script Questo echo verr eseguito anche su immissione che causi l esecuzione di break quando l utente batte 0 Nei cicli annidati break permette di specificare quale ciclo interrompere Guardate le pagine info per maggiori notizie 9 5 2 L integrato continue L istruzione continue riprende l iterazione di un ciclo enclosing for while o select Quando viene usato in un ciclo for la variabile di controllo preleva il valore dell elemento successivo della lista Quando viene usato in un costrutto while o until riprende invece l esecuzione con COMANDO TEST all inizio del ciclo 9 5 3 Esempi Nell esempio seguente i nomi dei file vengono convertiti in lettere minuscole Se non va fatta alcuna conversione un comando continue riavvia l esecuzione del ciclo Questi comandi non mangiano troppe risorse del sistema e molto facilmente problemi simili possono essere risolti usando sed e awk Tuttavia utile conoscere questo tipo di costruzione quando si eseguono dei compiti pesanti che potrebbero anch
88. Questo script verificher se avete dato un anno bisestile o meno echo Batti l anno che desideri controllare 4 cifre seguito da INVIO read anno ie A O echo else Sanno 5 o then 400 O Sanno 4 0 amp amp Sanno 100 Sanno un anno bisestile echo Tquesto non un anno bisestile if al michel test gt provabisestile sh Batti l anno che desideri controllare 4 cifre seguito da INVIO 2000 2000 un anno bisestile 8 2 2 Richieste di immissione dati dagli utenti L esempio seguente mostra come potete usare gli inviti prompt per spiegare ci che l utente dovrebbe inserire michel test gt cat amici sh bin bash Questo un programma che conserva aggiornata la vostra rubrica degli indirizzi amici var tmp michel amici echo Weta USUSI ER Questo script ti registrer nel database degli amici di Michel echo n Inserisci il tuo nome e premi INVIO read nome echo n Inserisci il tuo genere maschio femmina e premi ENTER Capitolo 8 Redigere script interattivi 118 read n 1 gener echo grep i nome Samici if then echo Sei gi registrato chiusura in corso exit 1 elif genere m then echo Sei stato aggiunto alla lista degli amici di Michel exit 1 else echo a uemest cima aLr WU read anni ii sanoi be 25 1 Cren echo n Di
89. Un altro uso degli alias per correggere degli errori di scrittura La prima parola di ogni semplice comando se priva di apici viene controllata per vedere se ha un alias Se cos quella parola viene sostituita dal testo dell alias Il nome degli alias e il testo di rimpiazzo pu contenere qualsiasi valido dato in ingresso di shell compresi i metacaratteri della shell eccetto che il nome dell alias non pu contenere La prima parola di un testo di rimpiazzo viene controllata per la presenza di alias ma una parola che identica ad un alias da espandere non viene espansa una seconda volta Ci significa che uno pu creare un alias ls di ls F per esempio e Bash non cercher di espandere ricorsivamente il testo di rimpiazzo Se l ultimo carattere di un valore di alias uno spazio o un carattere tab allora la successiva parola del comando che segue l alias verr anche controllata per l espansione degli alias Capitolo 3 L ambiente di Bash 68 Gli alias non vengono espansi quando la shell non interattiva a meno che non venga impostata l opzione expand_aliases mediante l integrato di shell shopt 3 5 2 Creazione e rimozione degli alias Gli alias si creano usando l integrato di shell alias Per un uso permanente inserite l alias in uno dei vostri file di inizializzazione della shell se inserite l alias unicamente nella riga di comando esso viene riconosciuto solo all interno della shell corrente franky gt
90. a errori p esempio Questa una linea che non contiene errori sandy gt Notate che l ultimo punto deve essere preceduto da un carattere di escape per poterlo realmente confrontare Nel nostro esempio l espressione confronta semplicemente qualsiasi carattere compreso l ultimo punto 5 2 3 Intervalli di linee Questa volta vogliamo estrarre le linee che contengono gli errori Nell esempio queste sono le linee da 2 a 4 Specificate tale intervallo per inviarlo insieme al comando d Capitolo 5 L editor di flussi GNU sed 82 sandy gt sed 2 4d esempio Questa la prima linea di un testo di esempio Questa una linea che non contiene errori Questa l ultima linea sandy lt gt Per stampare il file partendo da una certa linea sino alla fine del file utilizzate un comando simile a questo sandy gt sed 3 5d esempio Questa la prima linea di un testo di esempio E un testo con erori sandy gt Ci stampa solamente le prime due linee del file di esempio Il comando seguente stampa la prima linea che contiene il modello un testo fino a e comprendendo la successiva linea contenente il modello una linea sandy gt sed n un testo una linea p esempio Questa la prima linea di un testo di esempio E un testo con erori olti erori Cos tanti erori Tutti questi erori mi fanno impazzire Questa una linea che non contiene errori sandy gt 5 2 4 Cerca e so
91. a Turbo C shell un superinsieme di csh tutti i comandi csh funzioneranno in tesh ma non invece al contrario Tabella A 2 Caratteristiche differenti delle shell sh bash ksh csh Significato Azione Invito predefinito d utente gt gt gt I Forzatura redirezione gt file amp gt file oppure gt file gt file gt amp file Redirezione di stdout e 2 gt amp 1 2 gt amp 1 2 gt amp 1 stderr verso file Appendice A Caratteristiche della shell 169 sh bash ksh csh Significato Azione Espansione elementi in Q Q z elenco 3 3 2 2 lt lt Sostituzione emissione del comando comando o comando comando comando i comando incluso HOME HOME SHOME home Directory personale home n RI Lo Simbolo directory personale Catasta stack della dirs N directory di accesso var valore VAR valore var valore set var valore Assegnamento a variabile export i iabi export var export VAR valore P J setenv var val Ipost OnE VANAD var val d ambiente Possono essere referenziati nnnn nn ti f pi di 9 argomenti ngo ge ngo Tutti gli argomenti come parole separate St St St Stargv Numero di argomenti 5 S 5 status Stato d uscita del comando eseguito pi di recente PID del processo messo dietro le quinte pi di recente lt a Opzioni correnti file
92. a cui destinato La logica del programma chiaramente definita e visibile Uno script non svolge necessariamente un lavoro Gli script dovrebbero essere riutilizzabili Sb 1 5 2 Struttura La struttura di una script di shell molto flessibile Anche se in Bash viene garantita molta libert voi dovete assicurare una logica corretta un controllo dei flussi e l efficienza cosicch gli utenti che fanno funzionare lo script lo possano fare in modo facile e corretto All inizio di un nuovo script ponetevi le seguenti domande e Avr bisogno di qualche informazione dall utente o dall ambiente dell utente come conserver queste informazioni e c qualche file che deve essere creato dove e con quali permessi e propriet e quali comandi utilizzer quando si usa lo script in diversi sistemi tutti questi sistemi avranno tali comandi nelle versioni richieste e all utente serve una qualche notifica quando e perch 1 5 3 Terminologia La tabella successiva ci offre una panoramica dei termini di programmazione che vi occorrono per familiarizzare con Tabella 1 1 Panoramica sui termini della programmazione Termine Cos Ciclo Porzione di programma che viene eseguita zero loop o pi volte Controllo dei comandi Stato di uscita di prova per determinare se una command control parte del programma debba essere eseguita Capitolo 1 Bash e gli script di Bash 26 Flusso logi
93. a espressa che tacita N l autrice n l editore o qualunque altro venditore o distributore saranno ritenuti responsabili per qualsiasi danno causato o ritenuto causato sia direttamente che indirettamente da questo libro I loghi i marchi commerciali e i simboli utilizzati in questo libro sono propriet dei rispettivi titolari 8 Di cosa avete bisogno Bash disponibile su http www gnu org directory GNU La shell Bash si trova in quasi tutti i sistemi Linux ed attualmente si pu incontrare in un ampia variet di sistemi UNIX E facile da compilare se ve ne serve una vostra collaudata su una grande variet di UNIX Linux MS Windows ed ad altri sistemi Introduzione 10 9 Convenzioni utilizzate in questo documento In questo testo sono presenti le seguenti convenzioni tipografiche e d utilizzo Tabella 1 Convenzioni tipografiche e di utilizzo Tipo di testo Significato Testo virgolettato Citazione da persone risultato del computer tra virgolette vista da terminale Ingresso ed uscita dati letterale del computer catturati dal terminale solitamente reso con uno sfondo grigio chiaro comando Nome di un comando che pu essere inserito nella riga di comando aria Nome di una variabile o di un puntatore ad un contenuto della variabile come in SNOMEVAR opzione Opzione di un comando come in l opzione a del comando Is argomento Argomento di un comando
94. a il suo primo argomento come un nome di percorso Se questo nome di percorso non ancora nel percorso corrente viene aggiunto Il secondo argomento alla funzione definisce se il percorso sar aggiunto davanti o dietro la definizione del PATH percorso corrente Gli utenti normali ottengono solo l aggiunta di usr X11R6 bin ai loro percorsi mentre root ottiene una coppia di directory extra contenenti comandi di sistema Dopo essere stata usata la funzione subisce unset cosicch non viene conservata Capitolo 11 Funzioni 158 11 2 3 Copie di salvataggio in remoto L esempio seguente quello che uso per eseguire delle copie di salvataggio dei file per i miei libri Esso utilizza le chiavi SSH per abilitare la connessione remota Sono definite due funzioni buplinux e bupbash che producono entrambe un file tar che poi viene compresso e inviato ad un server Dopo di ci la copia locale viene rimossa Di domenica viene eseguita solo bupbash bin bash LOGFILE nethome tille log backupscript log echo Inizio backup per date gt gt SLOGFILE buplinux DIR nethome tille xml db linux basics TAR Linux tar BZIP STAR bz2 SERVER rincewind RDIR var www intra tille html training CAMERE tar cf TAR src xml src images png src images eps CECROMICOMPLSSIS TON MMS RARE ARS TOGA bzip2 STAR CECO itato PA ARMS TO GRATA e
95. a per eliminare i problemi 2 5 Esercizi Questo esercizio vi aiuter a scrivere il vostro primo script 1 Scrivete uno script utilizzando il vostro editor preferito Lo script dovrebbe mostrare il percorso alla vostra directory personale ed il tipo di terminale che state usando In aggiunta mostra tutti i servizi attivati nel livello 3 del vostro sistema suggerimento usate HOME TERME Is etc rc3 d S Capitolo 2 Scrivere e correggere gli script 40 Aggiungete commenti al vostro script Aggiungete informazioni per gli utenti del vostro script Cambiate i permessi nel vostro script in modo da poterlo eseguire Fate girare lo script in modalit normale ed in modalit di correzione Dovrebbe funzionare senza errori Commettete errori nel vostro script osservate cosa succede se sbagliate a scrivere i comandi se dimenticate la prima linea o mettete l qualcosa di incomprensibile o se sbagliate a scrivere i nomi delle variabili di shell o li scrivete in caratteri minuscoli dopo che sono stati dichiarati in maiuscolo Verificate cosa dicono i commenti di correzione su ci gie DI D Capitolo 2 Scrivere e correggere gli script 41 Capitolo 3 L ambiente di Bash In questo capitolo discuteremo sui vari modi in cui l ambiente di Bash pu essere influenzato e Modificare i file di inizializzazione della shell e Usare variabili e Usare stili di virgolettature differenti Eseguire calcoli aritmetici e Assegn
96. amata di Capitolo 1 Bash e gli script di Bash 21 bootstrapping 1 3 2 Comandi integrati della shell I comandi integrati built in command sono contenuti nella shell stessa Quando si usa il nome di un comando integrato come prima parola di un semplice comando la shell esegue il comando direttamente senza creare un nuovo processo I comandi integrati sono necessari per fornire funzionalit impossibili o poco convenienti da ottenere con programmi di utilit separati Bash supporta 3 tipi di comandi integrati integrati della Bourne Shell break cd continue eval exec exit export getopts hash pwd readonly return set shift test times trap umask e unset e Comandi integrati di Bash alias bind builtin command declare echo enable help let local logout printf read shopt type typeset ulimit e unalias e Comandi integrati speciali Quando Bash viene eseguito in modalit POSIX gli integrati speciali differiscono dagli altri comandi integrati per tre motivi 1 Gli integrati speciali si trovano prima delle funzioni di shell durante la ricerca dei comandi comand lookup 2 seun integrato speciale restituisce uno stato di errore una shell non interattiva termina 3 Le istruzioni di assegnamento che precedono il comando hanno effetto nell ambiente della shell dopo il completamento del comando Gli integrati speciali POSIX sono break continue eval exec exit export readonl
97. anno ad apportare migliorie agli script esistenti Prerequisiti non in questo corso e Dovreste essere un utente esperto di UNIX o Linux pratico dei comandi di base delle pagine man e di documentazione e Essere capaci di usare un editor testuale e Comprendere i processi di avvio e spegnimento del sistema init e initscript e Creare utenti e gruppi impostare password Introduzione 7 e Permessi modalit speciali e Comprendere le convenzioni dei nomi delle periferiche il partizionamento il montaggio e lo smontaggio dei file system e Aggiungere rimuovere software nei vostri sistemi Consultate Introduzione a Linux o il vostro mirror locale di TLDP se non avete trattato uno o pi di questi argomenti Informazioni aggiuntive si possono trovare nella vostra documentazione di sistema pagine man e info o nel Progetto di Documentazione Linux The Linux Documentation Project 3 Nuove versioni traduzioni e disponibilit L edizione pi recente si pu trovare su http tille garrels be training bash Potreste trovare la stessa versione su http tldp org LDP Bash Beginners Guide html index htm Questa guida disponibile in inglese stampata presso Fultus com Figura 1 La copertina anteriore di Bash Guide for beginners Fultus Machtele Garrels guide Li N 1 n AN roll jad gt jnners pash n Questa guida stata tradotta e traduzione cinese di Wang Wei su http xiaowan
98. anno inviato segnalazioni di errori esempi e commenti di cui fra gli altri tantissimi e Hans Bol uno dei gruppetti e Mike Sim commenti sullo stile e Dan Richter per gli esempi sulle matrici e Gerg Ferguson per le idee sul titolo e Mendel Leo Cooper per aver fatto spazio linux be per aver tenuto i miei piedi a terra e Frank Wang per i suoi dettagliati commenti sulle cose che ho sbagliato a fare Ringraziamenti speciali a Tabatha Marshall che si dedicata volonterosamente a svolgere una revisione ed un controllo ortografico e grammaticale completi Formiamo una bella squadra lei lavora quando io dormo E viceversa Introduzione 9 6 Riscontri Informazioni mancanti collegamenti assenti caratteri scomparsi note Inviateli a lt tille non vuole spam at garrels punto be gt la manutentrice di questo documento 7 Informazioni sui diritti Copyright c 2002 2007 Machtelt Garrels All rights reserved Redistribution and use in source and binary forms with or without modification are permitted provided that the following conditions are met Redistributions of source code must retain the above copyright notice this list of conditions and the following disclaimer Redistributions in binary form must reproduce the above copyright notice this list of conditions and the following disclaimer in the documentation and or other materials provided with the distribution Neither the name
99. aranno pi argomenti La stessa cosa avviene usando le chiamate find exec nel comando da eseguire sui file trovati ogni volta che se ne trova uno Cos facendo l uso di xargs velocizza parecchio i vostri script e le prestazioni della vostra macchina Nel prossimo esempio abbiamo modificato lo script della Sezione 8 2 4 4 in modo che accetti pi pacchetti da installare alla volta bin bash ai Si de IL ehen echo Uso 0 pacchetto i exit 1 iCal while do vum a nstalil misi lt lt CONETRM y CONFIRM shift done 309 pkoi Ea 9 8 Sommario In questo capitolo abbiamo trattato di come possano essere incorporati dei comandi ripetitivi in Capitolo 9 Compiti ripetitivi costrutti di ciclo La maggior parte dei comuni cicli vengono realizzati utilizzando le istruzioni for while o until oppure una combinazione di questi comandi Il ciclo for esegue un compito per un determinato numero di volte Se non sapete quante volte un comando dovrebbe essere eseguito utilizzate until o while per precisare quando il ciclo dovrebbe terminare I cicli si possono interrompere o ripetere utilizzando le istruzioni break e continue Si pu utilizzare un file come immissione per un ciclo usando l operatore di redirezione dell immissione i cicli possono anche leggere l emissione di comandi che viene data in pasto al ciclo ricorrendo ad un incanalamento Il costrutto select si usa per stampare menu negli script interattivi
100. arattere di spazio bianco IFS Qualsiasi carattere nell IFS che non sia uno spazio bianco di IFS insieme ad ogni adiacente carattere di spazio bianco di IFS delimita un campo Una sequenza di caratteri di spazio bianco IFS viene considerata anche come un delimitatore Se il valore di IFS nullo non avviene alcuna scomposizione delle parole TITTITTI Gli argomenti nulli espliciti o vengono mantenuti Gli argomenti nulli impliciti non tra apici vengono rimossi poich provengono dall espansione di parametri che non hanno valori Se un parametro senza valore viene espanso all interno di apici doppi ne deriva un argomento nullo e viene mantenuto Espansione e scomposizione delle parole Se l espansione non avviene non si esegue la scomposizione 3 4 9 Espansione del nome dei file Dopo la scomposizione delle parole a meno che non sia stata impostata l opzione f v Sezione 2 3 2 Bash analizza ogni parola alla ricerca dei caratteri e Se compare uno di questi caratteri allora la parola considerata come uno SCHEMA PATTERN e rimpiazzata con un elenco ordinato alfabeticamente dei nomi di file che combaciano con lo schema Se non si trovano nomi di file combacianti e l opzione della shell nullglob disabilitata la parola viene lasciata senza modifiche Se l opzione nullglob definita e non esistono corrispondenze la parola viene rimossa Se impostata l opzione di shell noca
101. are alias e Usare l espansione e la sostituzione 3 1 File di inizializzazione della shell 3 1 1 File di configurazione dell intero sistema 3 1 1 1 Jetc profile Quando invocato interattivamente con l opzione login o come sh Bash legge le istruzioni di etc profile Queste di solito impostano le variabili PATH USER MAIL HOSTNAME e HISTSIZE In alcuni sistemi il valore di umask viene configurato in etc profile in altri questo file contiene dei puntatori ad altri file di configurazione come etc inputrc il file di inizializzazione a lettura di linea del sistema intero dove potete configurare lo stile della campanella della linea di comando command line bell style e la directory etc profile d che contiene i file che determinano il comportamento di specifici programmi per l intero sistema Tutte le impostazioni che desiderate applicare a tutti gli ambienti dei vostri utenti potrebbero stare in tale file che potrebbe apparire come questo etc profile System wide environment and startup programs for login setup PATH SPATH usr X11R6 bin No core files by default ulimwe S e 0 S e ee a USERS E e LOGNAME SUSER MAIL var spool1 mail USER Capitolo 3 L ambiente di Bash 42 HOSTNAME bin hostname HISTSIZE 1000 Keyboard bell display style the readline config file aLe a STINPUIRC ca li i USEIOME Liaputies E E INPUTRC etc inputrc
102. are comandi per un esecuzione successiva utilizzando un solo nome per il gruppo Vengono eseguiti proprio come un comando regolare Quando il nome di una funzione di shell utilizzato come un semplice nome di comando viene eseguito l elenco dei comandi associati con tale funzione Le funzioni della shell vengono eseguite nel contesto della shell corrente nessun nuovo processo creato per interpretarle Le funzioni sono spiegate nel Capitolo 11 1 4 1 4 Parametri della shell Un parametro un entit che contiene valori Pu essere un nome un numero o un valore speciale Per quanto riguarda la shell una variabile un parametro che conserva un nome Una variabile ha un valore e zero o pi attributi Le variabili si creano con il comando integrato alla shell declare Se non stato dato un valore alla variabile viene assegnata una stringa vuota Le variabili possono essere eliminate solo con l integrato unset L assegnamento alle variabili trattato nella Sezione 3 2 mentre l uso avanzato delle variabili nel Capitolo 10 1 4 1 5 Espansione della shell x L espansione della shell viene attuata dopo che ciascuna linea di comando stata divisa in frammenti Queste sono le espansioni eseguite e Espansione delle parentesi Espansione della tilde e Espansione dei parametri e delle variabili Sostituzione dei comandi e Espansione aritmetica e Suddivisione delle parole e Espansione del nome dei
103. are con una matrice in un modo semplificato al massimo e teorico La ragione di questa monotonia che le matrici sono strutture piuttosto complesse Scoprirete che la maggioranza degli esempi pratici in cui possono essere usate le matrici sono gi implementati nel vostro sistema usando matrici sebbene in un livello pi basso nel linguaggio di programmazione C con cui scritta la maggioranza dei comandi UNIX Un buon esempio il comando integrato history di Bash Quei lettori che fossero interessati potrebbero controllare la directory built ins nell albero dei sorgenti di Bash dare un occhio a fc de f che elaborato quando si compilano gli integrati Un altra ragione per cui sono difficili da trovare dei buoni esempi che non tutte le shell supportano le matrici cosicch esse infrangono la compatibilit Dopo lunghi giorni di ricerche finalmente ho trovato questo esempio operando presso un fornitore provider Internet Esso distribuisce i file di configurazione del web server Apache negli host di una web farm bin bash api Sino Hei Ty cina echo Bisogna essere root per avviare 0 ae dp E ue 2 S e Eea echo Uso SO lt PaCn ETO metoc CoE exit 1 EL httpd_conf_new 1 httpd_conf_path usr local apache conf login htuser farm_hosts web03 web04 web05 web06 web07 fog a slm Sfuirsuam Nnosies i s ce Sii Slogin ie Isc Sito conr new ST Stirpe Le Gn posi su login c ssh i sudo usr local apache
104. are riferimento al contenuto di una voce di una matrice usate le parentesi graffe Ci necessario come potete constatare nell esempio seguente per scavalcare l interpretazione degli operatori di espansione da parte della shell Se il numero di indice o tutti i membri di una matrice sono referenziati bob in MATRICE one two tre bob in echo MATRICE uno due tre bob in echo MATRICE bno bob in echo MATRICE 2 ES bob in MATRICE 3 quattro bob in echo MATRICE uno due tre quattro Fare riferimento al contenuto di una variabile membro di una matrice senza fornire un numero indice lo stesso di fare riferimento al contenuto del primo elemento quello referenziato con numero di indice zero 10 2 3 Cancellare le variabili matriciali L integrato unset usato per distruggere matrici o variabili membri di una matrice bob in unset MATRICE 1 bob in echo MATRICE aO TeS Golier eeo bob in unset MATRICE Capitolo 10 Di pi sulle variabili 147 bob in echo MATRICE lt ar STILI ani 10 2 4 Esempi di matrici Esempi pratici dell uso delle matrici sono difficili da trovare Troverete script in quantit che in realt non fanno nulla nel vostro sistema ma che utilizzano le matrici per calcolare serie matematiche per esempio E questo sarebbe uno degli esempi pi interessante la maggioranza degli script mostrano solo ci che potete f
105. ase dati whatis apt get Programma di utilit per la gestione dei pacchetti aspell Controllo ortografico at atq atrm Accodamento esame o cancellazione di lavori dell ultima esecuzione Glossario 172 aumix Regola il mixer audio gawk Linguaggio di analisi ed elaborazione di modelli bash Bourne Again Shell batch Accodamento esame o cancellazione di lavori dell ultima esecuzione bg Fa girare un lavoro dietro le quinte bitmap Editor di bitmap e utilit di conversione per il Sistema X window bzip2 Un compressore di file a ordinamento di blocchi cat Concatena file e stampa sull emissione standard stdout cd Cambia Directory cdp cdplay Un programma interattivo in modalit testuale per controllare e riprodurre CD Rom audio sotto Linux Glossario 173 cdparanoia Un utilit per la lettura di CD audio che comprende caratteristiche extra per la verifica dei dati cdrecord Registra un CD R chattr Modifica gli attributi dei file chgrp Cambia il gruppo proprietario chkconfig Aggiorna o richiede le informazioni di livello di esecuzione dei servizi di sistema chmod Modifica i permessi di accesso ai file chown Cambia il proprietario e il gruppo di un file compress Comprime file cp Copia file e directory crontab Gestisce i file crontab csh Apre una shell C Glossario 174 cut Rimuove sezioni da ciascuna linea di un file date Stampa o imposta la data e l
106. aso Capitolo 5 L editor di flussi GNU sed 81 erori Usiamo la p per conseguire il risultato sandy gt sed erori p esempio Questa la prima linea di un testo di esempio E un testo con erori E un testo con erori olti erori olti erori Cos tanti erori Tutti questi erori mi fanno impazzire Cos tanti erori Tutti questi erori mi fanno impazzire Questa una linea che non contiene errori Questa l ultima linea sandy gt Come potete osservare sed stampa il file intero ma le linee contenenti la stringa di ricerca vengono stampate due volte Non ci che vogliamo Per stampare solamente quelle linee che soddisfano il nostro modello utilizziamo l opzione n sandy gt sed n erori p esempio IERUANbITAMi Si ON Ot olti erori Cos tanti erori Tutti questi erori mi fanno impazzire sandy gt 5 2 2 Cancellazione delle linee in ingresso contenenti un modello Utilizziamo lo stesso file testuale come esempio Ora vogliamo solamente vedere le linee che non contengono la stringa di ricerca sandy gt sed erori d esempio Questa la prima linea di un testo di esempio Questa una linea che non contiene errori Questa l ultima linea sandy gt Il comando d agisce escludendo la rappresentazione delle linee Le linee confrontate che iniziano con un certo modello e terminano con un secondo modello vengono mostrate in questo modo sandy gt sed n Quest
107. ati Introduzione 11 negli script di shell I capitoli dall otto al dodici si occupano dei pi comuni costrutti degli script di shell Tutti i capitoli hanno degli esercizi che verificheranno la vostra preparazione per quelli successivi e Capitolo 1 Rudimenti di Bash perch Bash cos valida costruzione di blocchi prime linee guida nello sviluppo di buoni script e Capitolo 2 Rudimenti di script scrittura e correzione e Capitolo 3 L ambiente di Bash file di inizializzazione variabili caratteri virgolettati ordine di espansione della shell alias opzioni e Capitolo 4 Espressioni regolari una introduzione e Capitolo 5 Sed una introduzione all editor di linea sed e Capitolo 6 Awk introduzione al linguaggio di programmazione awk e Capitolo 7 Istruzioni condizionali costrutti usati in Bash per verificare le condizioni e Capitolo 8 Script interattivi creare semplici script per catturare gli input degli utenti e Capitolo 9 Esecuzione ripetuta di comandi costrutti usati in Bash per automatizzare l esecuzione dei comandi e Capitolo 10 Variabili avanzate specificare i tipi delle variabili introduzione alle matrici delle variabili operazioni su variabili e Capitolo 11 Funzioni una introduzione e Capitolo 12 Cattura dei segnali introduzione alle segnalazioni dei processi segnali di cattura inviati dagli utenti Introduzione 12 Capitolo 1 Bash e gli script di Bash In questo modulo i
108. ca temporale in un file di registrazione date gt gt home franky log home_backup log echo backup riuscito gt gt home franky log home_backup log Prima di tutto pi facile che commettiate errori se indicate i nomi dei file e delle directory manualmente ogni volta che vi servono In secondo luogo supponete che franky voglia dare il suo script a carol poi carol dovr effettuare abbastanza numerose modifiche prima di poter usare lo Capitolo 3 L ambiente di Bash 58 script per salvare altre directory Per un facile riciclaggio rendete variabili tutti i file directory nomi utente nomi server ecc Cos avrete bisogno di modificare un valore per una volta senza dover scorrere l intero script per controllare dove presente un parametro Questo un esempio bin bash Questo script fa una copia di salvataggio della mia directory personale Cambiate i valori delle variabili per far funzionare lo script per voi BACKUPDIR home BACKUPFILES franky ARFILE var tmp home_franky tar BZIPFILE var tmp home_franky tar bz2 SERVER bordeaux REMOTEDIR 0pt backup franky OGFILE home franky log home_backup log cd BACKUPDIR Questo crea l archivio tar cf S TARFILE SBACKUPFILES gt dev null 2 gt amp l1 Per prima cosa rimuove il vecchio file bzip2 Ridirige gli errori dal momento che ne produce alcuni se l archivio non esiste Poi crea un nuovo file compresso rm BZIPFILE
109. centrale 8 2 4 3 Chiusura dei descrittori dei file Dal momento che i processi figli ereditano i descrittori di file aperti buona prassi chiudere un descrittore dei file quando non ve ne sia pi bisogno Ci si fa usando la sintassi exec fd lt amp Nell esempio soprastante il descrittore dei file 7 che stato assegnato all immissione standard viene chiuso ogni volta che all utente serve avere accesso alla vera periferica di immissione standard solitamente la tastiera Quello che segue un semplice esempio di redirezione del solo errore standard verso un incanalamento pipe michel gt cat listdirs sh bin bash Questo script stampa l emissione standard senza modifiche mentre l errore standard viene rediretto per l elaborazione con awk INPUTDIR S1 fd 6 punta la destinazione fd 1 uscita console nella shell corrente exec 6 gt amp 1 fd 1 punta l incanalamento fd 2 punta la destinazione fd 1 incanalamento o pipe fd 1 punta la destinazione fd 6 uscita console fd 6 chiusa esegue 1ls ls SINPUTDIR 2 gt amp 1 gt amp 6 6 gt amp Chiude fd 6 per awk ma non per ls A WISMRIB E GINE ORES ESTA Tp ea NON HA ACCESS ORA US o fd 6 chiuso per la shell corrente exec 6 gt amp 8 2 4 4 Documenti here Frequentemente il vostro script potrebbe chiamare un altro programma o script che richieda ingresso di dati Il documento here fornisce un modo per istruire la she
110. che colore sono i tuoi capelli read colore echo Verone Sanni colore gt gt Samici echo Sei stato aggiunto alla lista degli amici di Michel Tante grazie else echo Sei stato aggiunto alla lista degli amici di Michel exit 1 E Fi michel test gt cp amici sh var tmp cd var tmp michel test gt touch amici chmod atw amici michel test gt amici sh Ciao michel Questo script ti registrer nel database degli amici di Michel Inserisci il tuo nome e premi INVIO michel Inserisci il tuo genere maschio femmina e premi ENTER m Sei stato aggiunto alla lista degli amici di Michel michel test gt cat amici Notate che qui non stato omesso alcun risultato Lo script conserva solo le informazioni che interessano a Michel ma vi dir sempre che siete stati aggiunti alla lista a meno che non ci siate gi Ora altre persone possono eseguire lo script anny octarine tmp amici sh Ciao anny Questo script ti registrer nel database degli amici di Michel Inserisci il tuo nome e premi INVIO anny Inserisci il tuo genere maschio femmina e premi ENTER f Quanti anni hai 22 Di che colore sono i tuoi capelli nero Sei stato aggiunto alla lista degli amici di Michel Dopo un po la lista amici inizier ad apparire come questa iso 24 olack anny 22 black katya 22 blonde maria 21 black output omitted Naturalmente tale situazione non ideale dal momento che chiun
111. che incluse nei file di configurazione delle risorse di shell Il seguente comando esegue uno script in modalit compatibile POSIX willy scripts gt bash posix script sh Per modificare temporaneamente il corrente ambiente o per l utilizzo in uno script piuttosto potremmo usare set Usate il trattino dash per abilitare un opzione per disabilitarla willy test gt set o noclobber willy test gt touch test willy test gt date gt test Capitolo 3 L ambiente di Bash 70 bash test cannot overwrite existing file willy test gt set o noclobber willy test gt date gt test L esempio soprastante mostra l opzione noclobber che previene la sovrascrittura dei file esistenti da parte di operazioni di ridirezione Lo stesso vale per le opzioni a singolo carattere per esempio u che tratteranno le variabili non definite come errore quando definite con uscita di una shell non interattiva quando si incontrano tali errori willy gt echo VAR willy gt set u willy gt echo VAR bash VAR unbound variable Questa opzione utile anche per scoprire assegnamenti scorretti alle variabili lo stesso errore per esempio capiter pure quando si assegna una stringa di caratteri ad una variabile che era stata dichiarata esplicitamente come una contenente solo valori numerici interi Di seguito un ultimo esempio che mostra l opzione noglob che previene l espansione di caratteri speciali willy testdi
112. cho Copia in SSERVER gt gt SLOGHILE scp BZIP SERVER SRDIR gt dev null 2 gt amp 1 CCNOMIPE io sla RIS TOGHE echo e Done backing up Linux course nSource files PNG and EPS images nRubbish remove gt Usim VSZ pY bupbash DIR nethome tille xml db TAR Bash tar BZIP STAR bz2 FILES bash programming SERVER rincewind RDIR var www intra tille html training CARS DIRSI tari eia TARTES EEE SN echo Compressing STAR gt gt S SLOGFILE bzip2 STAR acli UU ireivito V S TOGENE CIC OM ODA SUS RIV ATO TO Giuliani scp BZIP S SERVER RDIR gt dev null 2 gt amp 1 CCHOMISESSEA ts OM A OCEN echo e Eseguito salvataggio del corso di Bash n FILES nRobaccia rimossa gt gt SLOGFILE da VSEBIN GIORNO date 5w o IS GORI 2 VA a E echo E date 5A in corso back up di Bash solamente gt gt SLOGFILE bupbash else buplinux bupbash PA echo e USalvaracpplo in remoto date RIUSCITONi ULI TOCE TINE Capitolo 11 Funzioni 159 Questo script viene avviato da cron significa senza interazione umana cosicch redirigiamo l errore standard standard error dal comando scp verso dev null Si potrebbe dedurre che tutte le fasi separate potrebbero essere combinate in un comando come tarc dir da salvare bzip2 ssh server cat gt backup tar bz2 Tut
113. co La struttura generale del programma Determina logic flow la sequenza logica dei compiti in modo che il risultato sia corretto e controllato Inserimento da utente Informazione fornita da una fonte esterna mentre user input il programma in esecuzione pu essere conservata e richiamata quando serve Salto condizionale Punto logico del programma in cui unna conditional branch condizione determina cosa avviene dopo 1 5 4 Una parola su ordine e logica Per velocizzare il processo di sviluppo l ordine logico di un programma dovrebbe essere pensato in anticipo Questo il primo passo quando si sviluppa uno script Possono essere usati numerosi metodi uno dei pi comuni quello di lavorare con liste Stilare un elenco dettagliato dei compiti implicati in un programma vi permette di descrivere ciascun processo Singoli compiti possono essere referenziati con il loro numero di elenco L utilizzo del vostro personale linguaggio parlato per annotare i compiti da svolgere con il programma vi aiuter a creare una forma comprensibile del programma stesso Successivamente potrete rimpiazzare i comandi del linguaggio quotidiano con le parole e i costrutti del linguaggio di shell L esempio sottostante mostra tale definizione del flusso logico Descrive la rotazione dei file di registro log file Questo esempio un possibile ciclo ripetitivo controllato dal numero di file di registro che desiderate ruotare 1
114. come in leggete man 1s comando opzioni sintassi dei comandi od utilizzo in generale nella riga di comando argomenti Nome di un file o di una directory per esempio Cambiate verso la nomefile 23 directory usr bin Tasto Tasti da battere sulla tastiera come battete Q per terminare Bottone Bottone grafico da premere come il bottone OK Menu gt Scelta Scelta da effettuare in un menu grafico per esempio Scegliete Guida gt Informazioni su Mozilla Firefox nel vostro navigatore di rete Termine o concetto importante Il kernel di Linux costituisce il cuore Terminologia E g del sistema La sbarra inversa in una vista di terminale o nella sintassi di un comando indica una riga non terminata In altre parole se vedete un comando lungo che suddiviso in pi righe significa Non premete ancora Invio v Capitolo 1 Collegamento al relativo argomento contenuto in questa guida L autore Collegamento cliccabile ad una risorsa di rete esterna 10 Organizzazione di questo documento Questa guida tratta concetti utili nella vita quotidiana del serio utente di Bash Sebbene sia richiesta una conoscenza di base dell uso della shell noi inizieremo con la discussione sui componenti elementari della shell e con esercizi nei primi tre capitoli I capitoli dal quattro al sei sono trattazioni sugli strumenti base che vengono normalmente impieg
115. da una barra inversa terminano la sostituzione dei comandi Quando si usa la forma COMANDO tutti i caratteri fra parentesi formano il comando nessuno trattato in modo speciale La sostituzione dei comandi pu essere annidata Per annidare quando si utilizza la forma ad apici inversi create un escape degli apici inversi con le barre inverse Se la sostituzione appare tra apici doppi la scomposizione delle parole e l espansione dei nomi non vengono attuate sui risultati 3 4 6 Espansione aritmetica L espansione aritmetica consente la valutazione di un espressione aritmetica e la sostituzione del risultato Il formato dell espansione aritmetica ESPRESSIONE L espressione trattata come se fosse tra apici doppi ma virgoletta doppia all interno delle parentesi non viene trattata in modo speciale Tutti i frammenti tokens nell espressione sono sottoposti a espansione dei parametri sostituzione dei comandi e rimozione degli apici Le sostituzioni Capitolo 3 L ambiente di Bash 64 aritmetiche possono essere annidate La valutazione delle espressioni aritmetiche eseguita in interi di lunghezza fissa senza controllo di straripamento sebbene la divisione per zero venga intercettata e riconosciuta come errore Gli operatori sono semplicemente gli stessi del linguaggio di programmazione C In ordine decrescente di precedenza la lista si presenta come questa Tabella 3 4 Operatori aritmetici
116. der segnali icraro rari 164 T2 Segnali ara E E E A E E E E EE a 164 PETIZIONE salle lati 164 12 1 2 Uso dei segnali con blica lella ail 165 12 2 Trappol m a ne e e a e a n R 166 12 21 In gener le ncnio RARA 166 12 2 2 Come Bash interpreta le trappole evererrrrrrrrerereeee cere sere eeere rece renze nere ezeonecnice 167 12 22 35 Ulteriori esempi carla iis 167 12 3 SOMMATO ii A TNA ARAN aa iaaea atar 168 REC nn IA 168 Appendice A Caratteristiche della ShEll vec errcerererrere rece nze see re nie nere rizzo nere cene nere rizionicioneee 170 A 1 Carate nst che conini a arreca 170 A 2 G r tteristiche differenti nsession e e a Rn 171 Glossano gala aerei 174 Indice sita ai iii at lele tei lA ida li ile 194 Introduzione 1 Perch questa guida Il motivo principale per la scrittura di questo documento che molti lettori avvertono che l esistente HOWTO troppo breve ed incompleto HOWTO mentre la guida Bash scripting eccessiva come opera di riferimento Non esiste nulla tra i due estremi Ho scritto pure questa guida sul principio generale che non sono disponibili abbastanza corsi elementari liberi sebbene dovrebbe essere cos Questa una guida pratica che sebbene non sempre molto seria tenta di fornire esempi di vita reale piuttosto che teorici In particolare l ho scritta perch non mi affascinano esempi ripresi ed eccessivamente semplificati scritti da persone che conoscon
117. di processi senso comune iniziare a provare con il segnale meno pericoloso SIGTERM In questo modo i programmi che si preoccupano dello spegnimento in maniera ordinata ottengono la possibilit di seguire le procedure per le quali essi sono stati progettati ad eseguire quando ricevono il segnale SIGTERM come la pulitura e la chiusura di file aperti Se inviate un segnale SIGKILL ad un processo sottraete qualsiasi possibilit al processo di eseguire una pulitura e chiusura ordinate cosa che potrebbe avere spiacevoli conseguenze Ma se non funziona una chiusura pulita i segnali INT o KILL potrebbero essere la sola maniera Per esempio quando un processo non muore usando Ctrl C meglio usare kill 9 su quell ID di processo maud gt ps ef grep stuck process maud 5607 2214 0 20505 tS 5 00 00 02 stuck_process maud gt kill 9 5607 maud gt ps ef grep stuck_process maud 5614 2214 0 20315 pt5 00 00 00 grep stuck _ process Sr sella stuck_process Quando un processo avvia diverse istanze killall potrebbe essere pi conveniente accetta le stesse opzioni di kill ma le applica a tutte le istanze di un dato processo Provate questo comando prima di adoperarlo in un ambito produttivo dal momento che potrebbe non funzionare come ci si aspetta in alcuni tra gli Unix commerciali 12 2 Trappole 12 2 1 In generale Ci potrebbero essere delle situazioni in cui non volete che gli utenti dei vostri script escano prima d
118. doppi 3 4 Espansione della shell 3 4 1 In generale Dopo che il comando stato suddiviso in frammenti token v Sezione 1 4 1 1 tali frammenti o parole vengono espansi o risolti Ci sono otto tipi di espansione eseguita che tratteremo nelle prossime sezioni nell ordine in cui vengono espansi Dopo tutte le espansioni viene eseguita la rimozione degli apici 3 4 2 Espansione delle parentesi graffe L espansione delle graffe brace expansion un meccanismo con cui possono essere generate delle stringhe arbitrarie Gli schemi pattern da sottoporre all espansione delle graffe prendono la forma di un PREAMBOLO opzionale seguito da una serie di stringhe separate da virgole tra una coppia di graffe seguita da un POSTSCRIPT opzionale Il preambolo prefissato in base a ciascuna stringa contenuta tra le graffe e il postscript viene agganciato a d ogni stringa risultante con espansione da sinistra a destra Capitolo 3 L ambiente di Bash 61 Le espansioni delle graffe possono essere annidate I risultati di ogni stringa espansa non vengono riordinati conservando l ordine da sinistra a destra franky gt echo p a e i o u zza pazza pezza pizza pozza puzza L espansione delle graffe viene eseguita prima di ogni altra espansione e viene mantenuto qualsiasi carattere speciale per le ulteriori espansioni Bash non applica alcuna interpretazione sintattica al contesto dell espansione o del testo tra graffe Per evitare c
119. e trap 2 trap 2 trap 2 onintr Ignora le interruzioni unalias unalias unalias Rimuove gli alias until until until Inizia un ciclo until while do while do while do while Inizia un ciclo while La Bourne Again Shell possiede molte altre caratteristiche qui non elencate Questa tabella solo per darvi un idea di come tale shell incorpori le idee utili provenienti da altre shell qui non ci sono spazi vuoti nella colonna di bash Maggiori informazioni sulle caratteristiche riscontrabili solo in Bash si possono rinvenire nelle pagine info di Bash nella sezione Bash features Ulteriori informazioni Dovreste leggere almeno un unico manuale trattandosi del manuale della vostra shell La scelta preferita sarebbe info bash essendo bash la shell GNU e quella pi semplice per i principianti Stampatevelo e portatevelo a casa studiatevelo ogni volta che avete 5 minuti Appendice A Caratteristiche della shell 171 Glossario Questa sezione contiene una panoramica in ordine alfabetico dei comandi UNIX comuni Maggiori informazioni sull uso si possono trovare nelle pagine man o info a2ps Formatta i file per la stampa in una stampante PostScript acroread Visualizzatore PDF adduser Crea un nuovo utente o aggiorna le informazioni predefinite del nuovo utente alias Crea un alias di shell per un comando anacron Esegue comandi periodicamente non presuppone una macchina sempre in funzione apropos Cerca stringhe nella b
120. e 6 1 1 gawk campi Sezione 6 2 1 gawk comandi Sezione 6 1 2 gawk formattazione Sezione 6 2 2 gawk script Sezione 6 2 5 gawk variabili Sezione 6 3 gedit Sezione 2 1 1 global variables Sezione 3 2 1 1 globbing Sezione 2 3 2 grep Sezione 4 2 1 H here documento Sezione 8 2 4 4 if Sezione 7 1 1 if annidati istruzioni di Sezione 7 2 3 immissione da utente Sezione 8 2 1 Sezione 8 2 2 immissione standard Sezione 8 2 3 1 init Sezione 1 3 1 Sezione 1 5 6 initialization files Sezione 3 1 input field separator Sezione 3 2 4 1 Sezione 3 2 5 Sezione 6 3 interactive editing Sezione 5 2 interactive scripts Sezione 8 1 interactive shell Sezione 1 2 2 2 1 Sezione 1 2 2 2 2 Indice Sezione 1 2 2 3 3 invito Sezione 3 1 3 invocation Sezione 1 2 2 1 J K kill Sezione 12 1 2 killall Sezione 12 1 2 ksh Korn shell Sezione 1 1 2 L line anchors Sezione 4 2 2 1 locale Sezione 3 3 6 locate Sezione 2 1 1 logic flow Sezione 1 5 4 login shell Sezione 1 2 2 2 1 lunghezza di una variabile Sezione 10 3 2 M matrice Sezione 10 2 1 menu Sezione 9 6 messaggi da utente Sezione 8 1 1 metacaratteri Sezione 4 2 2 3 metacaratteri nelle espressioni regolari Sezione 4 1 2 modifiche interattive Sezione 5 2 modifiche non interattive Sezione 5 3 N 194 nested if statements Sezione 7 2 3 noglob Sezione 2 3 2 non interactive editing Sezione 5 3 non i
121. e non essere necessari quando si inseriscono dei test nei posti giusti di uno script risparmiando risorse di sistema carol octarine test cat inminuscolo sh bin bash Questo script converte tutti i nomi di file contenenti caratteri MAIUSCOLI in nomi di file contenenti solo caratteri minuscoli LISTA 1ls fore mome in VELESIN o aas I Saone le aee a 1 ne continue efa ORIG nome NUOVO echo Snome tr A Z a z Capitolo 9 Compiti ripetitivi 137 mv SORIG SNUOVO echo Il nuovo nome di SORIG SNUOVO done Questo script ha almeno un difetto sovrascrive i file esistenti L opzione noclobber per Bash utile solo quando avviene una redirezione L opzione b al comando mv fornisce maggiore sicurezza ma sicura solo in caso di una sovrascrittura accidentale come dimostrato in questo test rar ds LIST test Resi EST continue ORIG Test echo Test SPIE EETAS A aZ NUOVO test mv b Test test carol octarine test rm i ceste l owgoses i ae IL tese t oppscs i T carol octarine test touch test Test TEST carol octarine test bash x inminuscolo sh echo Ii above meme ci mast st test Il nuovo nome di T ORIG TEST thecho TES ee Ie JAZZ NUOVO test Hr dv 19 INESI ces carol octarine of cf Cat rese Re DI was g gaoases N echo Il nuovo nome di
122. e pagine HTML all utente Quest ultimo ha tre scelte inserire un URL inserire i per indietro e t per terminare Gli ultimi 10 URL inseriti Capitolo 10 Di pi sulle variabili 153 dall utente sono conservati in una matrice da cui il medesimo pu ripristinare l URL utilizzando la funzionalit indietro Capitolo 10 Di pi sulle variabili 154 Capitolo 11 Funzioni In questo capitolo tratteremo di Cosa sono le funzioni Creazione e rappresentazione di funzioni da linea di comando Funzioni negli script Passaggio di argomenti alle funzioni Quando usare le funzioni 11 1 Introduzione 11 1 1 Cosa sono le funzioni Le funzioni di shell sono un modo di raggruppare comandi per l esecuzione successiva utilizzando un solo nome per questo gruppo o routine Il nome della routine deve essere univoco all interno della shell o dello script Tutti i comandi che costituiscono una funzione vengono eseguiti come dei normali comandi Quando si chiama una funzione come un semplice nome di comando l elenco dei comandi associati con quella funzione viene eseguito Una funzione si esegue all interno della shell in cui stata dichiarata non si crea nessun nuovo processo per interpretare i comandi Degli speciali comandi integrati si trovano prima delle funzioni di shell durante la ricerca dei comandi Gli integrati speciali sono break continue eval exec exit export readonly return set shift trap e unset
123. e variabili ambientali L impostazione e l esportazione normalmente vengono realizzate in una sola mossa export VARNAME valore Una sottoshell pu modificare le variabili se ereditate dalla genitrice ma i cambiamenti fatti dalla figlia non influiscono sulla genitrice Ci dimostrato nell esempio franky gt full _name Franky M Singh franky gt bash franky gt echo full_name franky gt exit Capitolo 3 L ambiente di Bash 51 franky gt export full name franky gt bash franky gt echo full_name Franky M Singh franky gt export full name Charles the Great franky gt echo full_name Charles the Great franky gt exit franky gt echo full_name Franky M Singh Eeey S Quando all inizio si prova a leggere il valore di full_name in una sottoshell esso non l echo mostra una stringa vuota La sottoshell si chiude e full_name viene esportato in quella genitrice una variabile pu essere esportata dopo che le stato assegnato un valore Poi viene avviata una nuova sottoshell in cui visibile la variabile esportata dalla genitrice La variabile viene modificata per contenere un altro nome ma nella genitrice il valore di questa variabile resta lo stesso 3 2 4 Variabili riservate 3 2 4 1 Variabili riservate della shell Bourne Bash utilizza certe variabili di shell nello stesso modo della shell Bourne In alcuni casi Bash assegna un valore predefinito a
124. ecificare voci di LISTA Il primo un esempio a linea di comando che mostra l uso di un ciclo for che esegue una copia di Capitolo 9 Compiti ripetitivi 129 salvataggio di ogni file xml Dopo aver dato il comando iniziare a lavorare sui vostri sorgenti sicuro carol octarine articles ls xml fillesi sani salle 2 m sails 5omil carol octarine articles ls xml gt lista carol octarine articles for i in cat lista do cp i i bak done carol octarine articles ls xml pulita rilal anl oas sie cal caio amica ileg sail las ilo Questo invece elenca i file in sbin che sono solo dei file di testo puro ed eventualmente gli script for i in ls sbin do file sbin i grep ASCII done 9 1 2 2 Uso del contenuto di una variabile per specificare voci di LISTA Il seguente uno specifico script applicativo per convertire file HTML secondo un certo schema in file PHP La conversione viene eseguita estraendo le prime 25 linee e le ultime 21 sostituendo queste con due marcatori tag PHP che forniscono le linee di intestazione e di pi pagina carol octarine html cat html2php sh bin bash specifico script di conversion LISTA ls html fon i aa USILIISIVA lo da html a php per i miei fil NUOVONOME Is i sed e s html php cat beginfile gt SNUOVONOME Caio Ue Mis Cale e cca ia NUOVONOMEN cat endfile gt gt SNUOVONOME done Dal
125. ectory alla pila come cambia la directory corrente e l integrato popd rimuove specifiche directory dalla pila e cambia la directory corrente in quella rimossa I contenuti possono essere mostrati dando il comando dirs o selezionando il contenuto della variabile DIRSTACK Ulteriori informazioni sul funzionamento di questo meccanismo si si pu trovare nelle pagine info di Bash 1 2 2 9 L invito Bash rende sempre pi divertente giocare con l invito prompt V la Sezione Controllare l invito nelle pagine info di Bash 1 2 2 10 La shell ristretta Quando si invoca come rbash o con le opzioni restricted o r capitano le cose seguenti Il cd integrato disabilitato E impossibile impostare o cancellare le impostazioni di SHELL ENV o BASH_ENV Capitolo 1 Bash e gli script di Bash 20 e I nomi dei comandi non possono pi contenere barre e I nomi dei file contenenti una barra non sono pi consentiti con il comando integrato sorgente L hash integrato non accetta barre con l opzione p e L importazione di funzioni all avvio disabilitata e SHELLOPTS viene ignorata all avvio e La redirezione in uscita utilizzando gt gt gt lt gt amp amp gt e gt gt disabilitata L integrato exec disabilitato e Le opzioni f e d sono disabilitate per l integrato enable e Un PATH base non pu essere specificato tramite l integrato command e Non possibile spegnere
126. el tempo usando le sequenze di abbandono per mezzo di tastiera per esempio perch si deve fornire un immissione oppure deve essere eseguita una ripulitura L istruzione trap cattura queste sequenze e pu essere programmata per eseguire un elenco di comandi in base alla cattura di quei segnali La sintassi per l istruzione trap chiara trap COMANDI SEGNALI Capitolo 12 Cattura dei segnali 164 Ci istruisce il comando trap a catturare i SEGNALI elencati che potrebbero essere i nomi di segnali con o senza il prefisso SIG oppure i numeri dei segnali Se un segnale 0 o EXIT i COMANDI vengono eseguiti quando la shell esce Se uno dei segnali DEBUG la lista dei COMANDI eseguita dopo ogni singolo comando Un segnale potrebbe essere anche specificato come ERR in tal caso i COMANDI vengono eseguiti ogni qualvolta un comando singolo esce con stato diverso da zero Notate che questi comandi non saranno eseguiti quando lo stato di uscita diverso da zero proviene da una parte di un istruzione if o da un ciclo while o until Non verranno neppure eseguiti se un AND logico amp amp o un OR danno come risultato un codice d uscita diverso da zero o quando lo stato di ritorno di un comando viene invertito usando l operatore Lo stato di ritorno del comando trap stesso zero a meno che non venga incontrata una specificazione di segnale non valida Il comando trap accetta una coppia di opzioni che sono documentate nelle pagine in
127. elif else che stampi le informazioni sul mese corrente Lo script dovrebbe stampare il numero di giorni in questo mese e fornire informazioni sugli anni bisestili se il mese attuale febbraio 2 Fate lo stesso usando un istruzione case e un utilizzo alternativo del comando date 3 Modificate etc profile in modo da ottenere un messaggio speciale di saluto quando vi connettete al sistema come root 4 Modificate lo script provabisestile sh della Sezione 7 2 4 in modo che richieda un unico argomento l anno Verificate che venga fornito esattamente un solo argomento 5 Scrivete uno script chiamato qualedemone sh che controlli se i demoni httpd e init stanno girando nel vostro sistema Se sta funzionando httpd lo script dovrebbe stampare un Capitolo 7 Istruzioni condizionali 112 messaggio come Questa macchina sta facendo girare un server web Usate ps per controllare i processi 6 Scrivete uno script che esegua una copia di sicurezza della vostra directory personale in una macchina remota usando scp Lo script dovrebbe fare rapporto in un file di registro per esempio l1og homebackup log Se non avete una seconda macchina a cui inviare la copia usate scp per provare a copiare in localhost Ci richiede chiavi SSH tra i due host oppure che dobbiate fornire una password La creazione di chiavi SSH spiegata in man shh keygen 7 Adattate lo script del primo esempio in Sezione 7 3 1 per includere i casi di uso dello spazio s
128. ell specificata partir come sottoshell di quella corrente ed eseguir lo script Questo fatto desiderate che lo script si avvii con specifiche opzioni o sotto specifiche condizioni non precisate nello script Capitolo 2 Scrivere e correggere gli script 35 Se non volete avviare una nuova shell ma eseguire lo script in quella corrente dovete usare source con esso source nome_script sh source L integrato di Bash source un sinonimo del comando punto della shell Bourne Lo script non ha bisogno in questo caso del permesso di esecuzione I comandi vengono eseguiti nel contesto della attuale shell cosicch ogni modifica apportata al vostro ambiente sar visibile al termine dell esecuzione dello script willy scripts gt source scriptl sh QUicoUIe mmilicicee willy scripts gt echo VALUE 9 willy scripts gt 2 2 Le basi degli script 2 2 1 Quale shell eseguir lo script Quando fate girare uno script in una sottoshell dovreste stabilire quale shell dovrebbe farlo funzionare Il tipo di shell in cui avete scritto lo script potrebbe non essere quella predefinita del vostro sistema cosicch i comandi da voi inseriti potrebbero restituire degli errori qualora eseguiti dalla shell sbagliata La prima riga dello script determina la shell d avvio I primi due caratteri della prima linea dovrebbero essere seguiti poi dal percorso della shell che dovrebbe interpretare i comandi succe
129. enente un elenco dei valori degli stati di PIPESTATUS uscita dai processi negli accodamenti pipelines in primo piano eseguiti pi recentemente che potrebbero contenere solo un singolo comando POSIXLY_ CORRECT Se questa variabile si trova nell ambiente quando si avvia bash la shell entra in modalit POSIX PPI D L ID di processo del processo genitore della shell PROMPT_COMMAND Se impostata il valore viene interpretato come un comando da eseguire prima della stampa di qualsiasi invito primario primary prompt o PS1 Il valore di questa variabile utilizzato come invito del comando select PS3 A Il predefinito Il valore l invito stampato prima che la linea di comando venga PS4 presentata con echo quando impostata l opzione x Preimpostato a EH PWD La directory corrente di lavoro come definita dal comando integrato cd Ogni volta che si fa riferimento a questo parametro viene generato un RANDOM numero casuale compreso tra 0 e 32767 Assegnare un valore a questa variabile seleziona il generatore di numeri casuali Capitolo 3 L ambiente di Bash 55 REPLY La variabile predefinita per l integrato read i Questa variabile aumenta con il numero dei secondi da quando stata SECONDS x avviata la shell SHELLOPTS Un elenco separato dai due punti delle opzioni di shell abilitate SULVI Incrementata di uno ogni volta che v
130. ente linea di comando COMP_WORDS Una variabile matriciale da cui Bash legge i completamenti possibili COMPREPLY generati da una funzione di shell invocata dall utilit per il completamento programmabile Capitolo 3 L ambiente di Bash 53 Una variabile matriciale con gli attuali contenuti della catasta stack DIRSTACK delle directory EUID Il reale ID numerico dell utente corrente FCEDIT L editor utilizzato come predefinito dall opzione e nel comando uo integrato fc FIGNORE Un elenco dei suffissi da ignorare separato dai due punti quando si i esegue il completamento dei file FUNCNAME Il nome di qualsiasi funzione di shell attualmente in esecuzione GLOBIGNORE Un elenco separato dai due punti degli schemi che definiscono l insieme dei nomi dei file da ignorare durante l espansione dei nomi Una variabile matriciale che contiene l elenco dei gruppi a cui GROUPS a appartiene l attuale utente Fino a tre carattere che controllano l espansione della cronologia la histchars e sostituzione rapida e la tokenizzazione HISTCMD Il numero cronologico o l indice nell elenco della cronologia del comando corrente HISTCONTROL Determina se un comando viene aggiunto al file della cronologia HISTFILE Il nome del file in cui viene salvata la cronologia dei comandi Il valore predefinito bash_history HISTF
131. er proteggere la variabile dall essere espansa dai caratteri immediatamente seguenti che potrebbe essere interpretata come parte del nome Quando vengono utilizzate le graffe la graffa di chiusura corrispondente la prima non resa con escape dalla barra inversa o all interno di una stringa tra virgolette e non dentro una espansione aritmetica integrata una sostituzione di comandi o un espansione di parametri La forma base dell espansione dei comandi PARAMETRO Il valore di PARAMETRO viene sostituito Le graffe sono richieste quando PARAMETRO un parametro posizionale con pi di una cifra oppure quando PARAMETRO seguito da un carattere che non deve essere interpretato come parte del suo nome x Se il primo carattere di PARAMETRO un punto esclamativo Bash utilizza il valore della variabile formato dal resto di PARAMETRO come nome della variabile Tale variabile viene poi espansa e quel valore viene usato nella restante sostituzione piuttosto che il valore del PARAMETRO stesso Ci noto come espansione indiretta indirect expansion Vi sar sicuramente familiare l espansione diretta dei parametri dal momento che capita tutte le volte anche nel caso pi semplice come in quello precedente o quello che segue franky gt echo SHELL bin bash Il successivo un esempio di espansione indiretta franky gt echo N NNTPPORT NNTPSERVER NPX_PLUGIN_PATH Notate che questa non
132. esicaettiisoo Iaia echo Ora esiste un correttore debugger completo per Bash disponibile su SourceForge Queste funzioni per la correzione sono disponibili nelle versioni pi moderne di Bash a partire dalla 3 x 2 3 2 Correzione su parteli dello script Utilizzando l integrato di Bash set potete far eseguire in modalit normale quelle parti dello script di cui siete certi che non abbiano errori e potete mostrare le informazioni per la correzione solo delle zone problematiche Dite che non siete sicuri di ci che far il comando w nell esempio script1 commentato sh quindi potremmo includerlo in uno script come questo set Xx attiva i controlli di correzione da qui w set x ferma i controlli di correzione da qui Capitolo 2 Scrivere e correggere gli script 38 Il risultato sar simile a questo Wiilys2SCrpes Cs crap Lo script inizia adesso Ciao willy Ora ti invio un elenco degli utenti connessi w Cr10 0prmupalestaavs AME 07 is ra so sica vera GO 008 USER LINE FROM LOGIN IDLE IEEn PCPU WHAT root TEVA i Sat 2pm Sidia 00248 0 058 das rata gO Sat Arom so 0 00s R Si paoli pes Sole 54 02 36 88s 36 88s BitchX willyke wally j90es 2 Sat 2pm 54 02 0 13s 0 06s usr bin screen T SIC TE Adesso sto impostando due variabili Questa una stringa nero E questo un numero Ore ici mesicituilsceo LYING UEO WVi SCEipess Potete attivare e disattivare la modalit di correzione q
133. esto intero di ogni record La sintassi come segue kelly is in gt df h awk dev hd print 6 t 5 46 boot 10 Joor 84 Jast 97 Sucos 8 Joa favo e 85 kelly as ba gt Gli apici devono essere sotto escape poich hanno un significato speciale per il programma in awk Di sotto un altro esempio in cui cerchiamo nella directory etc dei file che terminano per conf ed I ty iniziano o con a o con x utilizzando le espressioni regolari estese kelly is in etc gt 1s 1 awk lt a x conf print 9 amd conf NEI CONE xcdroast conf xinetd conf kally ie sha ates Questo esempio illustra il significato speciale del punto nelle espressioni regolari il primo indica che vogliamo cercare qualsiasi carattere dopo la prima stringa di ricerca il secondo sotto escape perch fa parte di una stringa da ricercare la fine del nome del file 6 2 4 Modelli speciali Per far precedere l emissione da commenti utilizzate l istruzione BEGIN kelly is in etc gt 1s 1 awk BEGIN print File trovati n lt al lx conf print 9 File trovati amd conf antivir conf xcdroast conf xinetd conf kelly 18 dm TGS L istruzione END si pu aggiungere per inserire del testo dopo che l intera immissione input dei dati stata elaborata kelly rs Gua re gt la LI A ami NS leal icons A arine 9 END prime y Posso fare qualcosa ancora per lei
134. ev null zirac AS doit Sarver ate x1 6888 Joao rpc x 32 32 Portmapper RPC user bin false7 nscd x 28 28 NSCD Daemon bin false named x 25 25 Named var named bin false semid zs 233235 3 var SP00 quid dev maL ldap x 55 55 LDAP User var lib ldap bin false apache x 48 48 Apache var www bin false cathy gt grep c false etc passuwd 7 cathy gt grep i ps bash grep v history home cathy bashrc PS1 033 1 44m SUSER is in w 033 0Om _ Con il primo comando l utente cathy mostra dal file etc passwa le linee contenenti la stringa root Poi mostra i numeri di linea contenenti questa stringa di ricerca Con il terzo comando controlla quali utenti non stanno bash ma gli acccount con la shell nologin non vengono mostrati Quindi conta il numero di account che hanno bin false come shell L ultimo comando mostra le linee da tutti i file nella sua directory personale che iniziano con bash escludendo le coincidenze con la stringa history in modo da tralasciare i confronti con bash_history che potrebbe contenere la medesima stringa in maiuscolo o in minuscolo Fate attenzione che la ricerca per la stringa ps e non per il comando ps Ora vediamo che cos altro possiamo fare con grep utilizzando le espressioni regolari 4 2 2 Grep e le espressioni regolari p Se non siete su Linux Noi usiamo in questi esempi GNU grep il quale supporta le espressioni regolari estese GNU grep di ba
135. ferenti da parte di utenti differenti In tal caso rosso significa pericolo Quando avete un invito verde non preoccupatevi eccessivamente Notate che source resourcefile lo stesso di resourcefile Se doveste perdervi tra tutti questi file di configurazione e ritrovarvi a confronto con impostazioni la cui origine non chiara utilizzate le istruzioni echo proprio come per gli script di ricerca degli errori v Sezione 2 3 2 Potreste aggiungere delle linee come questa echo Ora in esecuzione bash_profile o come queste Capitolo 3 L ambiente di Bash 47 CCOMMO AMSA sj SO Is NEER export PS1 valore qualsiasi echo PS1 adesso impostato a PS1 3 2 Variabili 3 2 1 Tipi di variabili Come visto negli esempi precedenti le variabili di shell sono in caratteri maiuscoli per convenzione Bash tiene un elenco di due tipi di variabili 3 2 1 1 Variabili globali Le variabili globali o variabili ambientali environment variables sono disponibili in tutte le shell I comandi env o printenv possono essere utilizzati per mostrare le variabili ambientali Questi programmi sono compresi nel pacchetto sh utils Sotto c un risultato tipo franky gt printenv ECEe gee CDPATH usr local usr CFLAGS 02 fomit frame pointer COLORTERM gnome terminal CXXF LAGS 02 fomit frame pointer DISPLAY 0 DOMAIN hg garrels be e TOR vi FCEDIT vi ENTEN REMO G_BROKEN_FILENAMES 1 GDK_USE_X
136. file esistente bash_logout alla chiusura della sessione logout Vengono emessi dei messaggi di errore se i file di configurazione esistono ma non sono leggibili Se un file non esiste bash cerca il successivo 1 2 2 2 2 Chiamata come shell interattiva non di login Shell non di login significa che non dovete autenticarvi nel sistema Per esempio quando aprite un terminale usando una icona o una voce di menu questa una shell non di login File letti Capitolo 1 Bash e gli script di Bash 15 bashrc Questo file normalmente si riferisce a bash_profile if f bashrc then bashrc fi V Capitolo 7 per maggiori informazioni sul costrutto if 1 2 2 2 3 Chiamata non interattiva Tutti gli script usano shell non interattive Essi sono programmati per svolgere certi compiti e non possono essere istruiti a svolgere altri lavori eccetto quelli per cui sono stati programmati File letti e definito da BASH_ENV PATH non viene utilizzato per ricercare questo file cosicch se volete usarlo meglio riferirsi ad esso dando il percorso ed il nome completi 1 2 2 2 4 Chiamata con il comando sh Bash cerca di comportarsi come lo storico programma sh mentre aderisce il pi possibile allo standard POSIX File letti etc profile e profile Quando chiamata interattivamente la variabile ENV pu puntare ad informazioni di avvio aggiuntive 1 2 2 2 5 Modalit POSIX Questa o
137. fo di Bash Qui c un esempio molto semplice che cattura Ctrl C proveniente dall utente stampando un messaggio Quando provate ad uccidere questo programma senza specificare il segnale KILL non accadr nulla bin bash traptest sh ica Nec Iulia STIONE STGIIRIZIVI clio Spoiol ie SSU while Questo la stessa cosa di while true do sleep 60 Questo script in realt non sta facendo nulla done 12 2 2 Come Bash interpreta le trappole Quando Bash riceve un segnale per il quale stata predisposta una trappola mentre sta attendendo il completamento di un comando la trappola non sar eseguita fino a che questo comando non sar completato Quando Bash in attesa di un comando asincrono attraverso l integrato wait la ricezione di un segnale per cui stata predisposta una trappola far s che l integrato wait restituisca immediatamente uno stato di uscita maggiore di 128 subito dopo l esecuzione della trappola 12 2 3 Ulteriori esempi 12 2 3 1 Scoprire quando viene utilizzata una variabile Quando si correggono script pi lunghi potreste voler assegnare ad una variabile l attributo trace ed intercettare i messaggi di DEBUG di quella variabile Normalmente dichiarereste una variabile solo utilizzando un assegnamento come VARIABILE valore Sostituire la dichiarazione della variabile con le linee seguenti potrebbe fornire una informazione interessante su cosa stia facendo il Capitolo 12 Cattura dei
138. g net bgb cn traduzione ucraina di Yaroslav Fedevych ed il suo gruppo su http docs linux org ua index php LDP Bash beginners guide Una traduzione francese in corso e verr aggiunta ai collegamenti non appena sar terminata 4 Cronologia delle revisioni Cronologia delle revisioni Introduzione 8 Revisione 1 11 2008 12 27 Revisionata da MG Trattate le segnalazioni dei lettori Revisione 1 10 2008 06 06 Revisionata da MG Cambio di indirizzi Revisione 1 9 2006 10 10 Revisionata da MG Incorporati i commenti dei lettori aggiunto indice utilizzando le etichette DocBook Revisione 1 8 chiarito esempio nel Capitolo 4 corretto doc here nel capitolo 9 verifiche generali e correzione degli errori tipografici aggiunti i collegamenti alle traduzioni cinese e ucraina note ed altro da sapere su awk nel capitolo 6 Revisione 1 7 Corretti errori tipografici nei capitoli 3 6 e 7 incorporati dei commenti dei letttori aggiunta una nota nel capitolo 7 Revisione 1 6 Correzioni minori aggiunte pi parole chiave informazioni su nuova Bash 3 0 tolta un immagine vuota Revisione 1 0 Versione iniziale per LDP pi esercizi pi marcature meno errori e aggiunta del glossario Revisione 1 0 beta Pre rilascio 5 Contributi Grazie a tutti gli amici che hanno aiutato o hanno cercato di farlo e a mio marito le vostre parole di incoraggiamento hanno reso possibile questo lavoro Grazie a tutte le persone che h
139. ga da leggere nella shell o quando questa viene invocata per leggere dall ingresso standard dei dati standard input che permette di impostare i parametri posizionali v Capitolo 3 1 2 2 3 2 Questa una shell interattiva Verificate osservando il contenuto dello speciale parametro contiene una i quando la shell interattiva eddy gt echo himBH Capitolo 1 Bash e gli script di Bash 17 Nelle shell non interattive l invito o prompt PS1 non impostato 1 2 2 3 3 Comportamento della shell interattiva Differenze nella modalit interattiva e Bash legge i file di avvio e Controllo dei processi normalmente abilitato e Gli inviti sono definiti PS2 abilitata per i comandi multilinea impostata di solito a gt Questo anche l invito che ottenete quando la shell ritiene che abbiate inserito un comando incompleto per esempio quando scordate degli apici delle strutture dei comandi che non possono essere tralasciate ecc e I comandi vengono letti in modo predefinito dalla riga di comando utilizzando readline e Bash interpreta l opzione di shell ignoreeof invece di uscire immediatamente con la ricezione di EOF End Of File e La cronologia dei comandi e l espansione della cronologia vengono abilitate in partenza La cronologia viene salvata nel file puntato da HISTFILE quando la shell termina In partenza HISTFILE punta a bash_history E abilitata l espansione deg
140. hiudono Una dimostrazione bob in cat vartest sh bin bash Questo script controlla se una variabile stata dichiarata In caso contrario esce stampando un messaggio echo TESTVAR C cos tanto che ancora volevo fare echo TESTVAR stata dichiarata possiamo procedere bob in testdir vartest sh vartest sh line 6 TESTVAR C cos tanto che ancora volevo fare bob in testdir export TESTVAR presente bob in testdir vartest sh PISSSESe ESTVAR stata dichiarata possiamo procedere L uso di al posto del punto esclamativo imposta la variabile per l espansione di PAROLA se non esiste non succede nulla 10 3 3 2 Rimozione di sottostringhe Per togliere un numero di caratteri uguale a OFFSET da una variabile usate questa sintassi VAR OFFSET LUNGHEZZA Il parametro LUNGHEZZA definisce quanti caratteri tenere a cominciare dal primo carattere dopo il punto di offset Se viene omesso LUNGHEZZA viene presa la restante parte del contenuto della variabile bob in export STRINGA questoeunnomemoltolungo bob in echo STRINGA 6 Capitolo 10 Di pi sulle variabili 151 eunnomemoltolungo bob in echo STRINGA 9 9 nomemolto VAR PAROLA VAR PAROLA Questi costrutti sono usati per cancellare il modello corrispondente all espansione di PAROLA in VAR PAROLA si espande per produrre un modello proprio come nell espansione dei n
141. iarare una variabile MATRICE NUMINDICE valore NUMINDICE viene trattato come una espressione aritmetica che deve essere calcolata come numero positivo La dichiarazione esplicita di una matrice si realizza usando l integrato declare declare a NOMEMATRICE Anche una dichiarazione con un numero di indice verr accettata ma il numero di indice sar ignorato Gli attributi della matrice si possono specificare utilizzando gli integrati declare e readonly Gli attributi si applicano a tutte le variabili della matrice non potete avere delle matrici miste Le variabili matriciali possono essere create anche utilizzando assegnamenti composti in questo formato Capitolo 10 Di pi sulle variabili 146 MATRICE valore1 valore2 valoreN Ogni valore poi nella forma di numeroindice stringa Il numero d indice facoltativo Se fornito quell indice assegnato ad esso altrimenti l indice dell elemento assegnato il numero dell ultimo indice che stato assegnato pi uno Questo formato accettato anche da declare Se non vengono forniti numeri d indice l indicizzazione inizia da zero L aggiunta di membri mancanti o extra in una matrice si fa usando la sintassi NOMEMATRICE NUMEROINDICE valore Ricordate che l integrato read mette a disposizione l opzione a che consente la lettura e l assegnamento di valori alle variabili membri di una matrice 10 2 2 Dereferenziamento delle variabili di una matrice Per f
142. iene avviata una nuova istanza di Bash Il valore di questo parametro viene impiegato come stringa di formato TIMEFORMAT specificante come le informazioni di temporizzazione degli accodamenti prefissate con la parola riservata time dovrebbero essere mostrate TMOUT Se inpostata con un valore maggiore di zero TMOUT viene trattata come il timeout predefinito per la funzione read UID L attuale ID utente numerico dell utente corrente Controllate le pagine man info o doc di Bash per informazioni estese Alcune variabili sono di sola lettura altre vengono impostate automaticamente ed alcune perdono il loro significato quando impostate con un valore diverso da quello predefinito 3 2 5 Parametri speciali La shell tratta in modo speciale diversi parametri Questi parametri possono essere solo referenziati un assegnamento a loro non consentito Tabella 3 3 Variabili speciali di bash Carattere Definizione Espansione ai parametri posizionali iniziando da uno Quando avviene l espansione con gli apici doppi essa si espande ad una singola parola con il valore di ciascun parametro separato dal primo carattere della variabile speciale IFS Espansione ai parametri posizionali iniziando da uno Quando avviene Se l espansione con gli apici doppi ciascun parametro si espande in una parola separata St Espansione al numero di parametri posizionali in decimale 4 Espansione allo s
143. il comando non n una funzione n un integrato lo ricerca analizzando le directory elencate in PATH Bash utilizza una tabella di hash hash table area di conservazione dei dati in memoria per ricordare l intero nome dei percorsi degli eseguibili in modo da evitare estese ricerche in PATH e se la ricerca non riesce bash stampa un messaggio di errore e restituisce uno stato di uscita di 127 e se la ricerca riesce o il comando contiene delle sbarre la shell esegue il comando in un ambiente di esecuzione separato e se l esecuzione fallisce perch il file non eseguibile e non una directory si suppone che sia uno script di shell e se il comando non stato iniziato in modo asincrono la shell aspetta il comando per completare e raccogliere il suo stato di uscita 1 4 1 8 Scriptdi shell Quando un file contenente comandi di shell viene usato come primo argomento non opzione al momento di invocare Bash senza c o s ci creer una shell non interattiva Tale shell per prima cosa cerca il file di script nella directory corrente poi guarda in PATH se non possibile trovare l il file Capitolo 1 Bash e gli script di Bash 25 1 5 Sviluppare buoni script 1 5 1 Propriet dei buoni script Questa guida principalmente sull ultimo mattone per costruire la shell gli script Alcune considerazioni generali prima di continuare 1 Uno script dovrebbe girare senza errori Dovrebbe eseguire il compito
144. il modo ristretto Quando viene eseguito un comando che si scopre essere uno script rbash esclude qualsiasi restrizione prodotta per eseguire lo script Ulteriori informazioni e Sezione 3 2 Sezione 3 6 Info bash gt Basic Shell Features gt Redirections e Sezione 8 2 3 redirezione avanzata 1 3 Esecuzione dei comandi 1 3 1 In generale Bash stabilisce il tipo di programma che deve essere eseguito I programmi normali sono comandi di sistema che esistono nel vostro sistema in forma compilata Quando un tale programma viene eseguito viene creato un nuovo processo perch Bash crea una copia esatta di se stesso Questo processo figlio ha lo stesso ambiente del suo genitore mentre solo il numero ID del processo diverso Questa procedura viene chiamata biforcazione o forking Dopo il processo di biforcazione lo spazio degli indirizzi del processo figlio viene sovrascritto con i nuovi dati del processo Ci viene realizzato tramite una chiamata exec al sistema Il meccanismo fork and exec scambia poi un vecchio comando con uno nuovo mentre l ambiente in cui viene eseguito il nuovo programma rimane il medesimo compresi la configurazione delle periferiche d ingresso e uscita le variabili ambientali e la priorit Tale meccanismo usato per creare tutti i processi di UNIX e cos si applica al sistema operativo Linux Anche il il primo processo init con ID di processo 1 viene biforcato durante la procedura di avvio chi
145. ilde consistono in un numero N eventualmente prefissato da un o un il prefisso della tilde viene sostituito dall elemento corrispondente preso dalla catasta stack delle directory come potrebbe essere mostrato tramite l invocazione dell integrato dirs con i caratteri che seguono la tilde nel prefisso tilde come argomento Se il prefisso tilde senza la tilde consiste in un numero non preceduto da o si intende Se il nome di autenticazione non valido o l espansione della tilde fallisce la parola viene lasciata immutata x Ogni assegnazione di variabile verificata per prefissi tilde senza apici che seguono immediatamente un o In questo caso viene eseguita anche l espansione della tilde Di conseguenza uno pu usare nomi di file con la tilde nelle assegnazioni a PATH MAILPATH e CDPATH e la shell attribuir il valore espanso TI Esempio franky gt export PATH PATH testdir testdir sar espansa a HOME testdir cosicch se HOME var home franky la Capitolo 3 L ambiente di Bash 62 directory var home franky testdir verr aggiunta al contenuto della variabile PATH 3 4 4 parametri della shell e l espansione delle variabili Il carattere introduce l espansione dei parametri la sostituzione dei comandi o l espansione aritmetica Il nome o il simbolo dei parametri da espandere possono essere racchiusi tra graffe che sono opzionali ma servono p
146. imostrare ulteriormente cosa sed pu fare 1 Puga Stampate un elenco delle linee nella vostra directory scripts terminanti con sh Ricordatevi che potreste dover togliere l alias a ls Mettete il risultato in un file temporaneo Fate un elenco dei file in usr bin che hanno la lettera a come secondo carattere Mettete il risultato in un file temporaneo Cancellate le prime 3 linee di ogni file temporaneo Stampate nell uscita standard soltanto le linee contenenti il modello an Create un file contenente i comandi di sed per eseguire i due compiti precedenti Aggiungete a questo file un comando extra che attacchi una stringa come Ci potrebbe avere qualcosa a che fare con man e le pagine man nella linea che precede ogni ricorrenza della stringa man Controllate i risultati Un lungo elenco della directory radice viene usato come dato in ingresso Create un file contenente comandi di sed che verifichino collegamenti simbolici e file normali Se un file un collegamento simbolico fatelo precedere da una linea come Questo un collegamento simbolico Se il file un normale file aggiungete una stringa nella stessa linea con un commento come lt questo un file normale Create uno script che mostri le linee contenenti degli spazi bianchi da un file Questo script dovrebbe utilizzare uno script sed e mostrare delle informazioni sensate all utente Capitolo 5 L editor di flussi GNU sed 86 Capitol
147. intf Questi sono gli utenti attualmente collegati n Wall MEG an eras y USHR SO i pringe val peirar Vouesiro unane che Gira dia un processore unane m aa printf Questa l informazione di uptime n Capitolo 1 Bash e gli script di Bash 28 uptime mici Val printf Questo tutto gente n La creazione di script di facile uso grazie all inserimento di messaggi viene trattata nel Capitolo 8 Posizione standard della Bourne Again shell Ci implica che il programma bash sia installato in bin Se non disponibile stdout Se eseguite uno script da cron fornite i nomi dei percorsi interi e ridirigete dati in uscita ed errori Siccome la shell gira in modo non interattivo qualsiasi errore potrebbe determinare l uscita prematura dello script se non pensate a ci I capitoli seguenti tratteranno i dettagli degli script qui sopra 1 5 6 Esempio di script init Uno script init avvia i servizi di sistema nelle macchine UNIX e Linux Il demone del registro di sistema system log daemon il demone della gestione dell alimentazione power management daemon i demoni dei nomi e della posta sono degli esempi comuni Questi script conosciuti anche come script di avvio startup script vengono conservati in una locazione specifica del vostro sistema come etc rd init do etc init d Init il processo iniziale legge i suoi file di configurazione e decide quali servizi avviare o fermare in ciascun livello di esecuzione Un li
148. invii un messaggio elettronico con i suoi risultati utilizzate per esempio mail s Uso spazio su disco lt voi vostro_comp gt lt risultato Se il demone quota in funzione usate tale informazione altrimenti usate find 3 Create un emissione in stile XML da un elenco separato da tabulazioni nella forma seguente Sta per una linea molto lunga con un sacco di descrizione sta per un altra lunga linea un altro sta per una linea pi lunga prova sta per luuuuuuuuuuuuunga linea ma proprio luuuuuuuuuuuuuuuuuuuunga L emissione dovrebbe leggere lt row gt lt entry gt Sta per lt entry gt Sami linea molto lunga lt entry gt lt row gt lt row gt lt entry gt sta per lt entry gt enca lunga linea lt entry gt lt row gt lt row gt lt entry gt un altro sta per lt entry gt FEINTEN linea pi lunga lt entry gt lt row gt lt row gt lt entry gt prova sta per lt entry gt lt entry gt luuuuuuuuuuuuunga linea ma proprio luuuuuuuuuuuuuuuuuuuunga lt entry gt lt row gt In aggiunta se sapete qualcosa di XML scrivere uno script BEGIN e END per completare la tabella oppure fatelo in HTML Capitolo 6 Il linguaggio di programmazione GNU awk 97 Capitolo 7 Istruzioni condizionali In questo capitolo discuteremo dell uso delle condizioni negli script Bash Ci comprende i seguenti argomenti l istruzione if l uso dello stato di uscita di un comando il confront
149. ione ed il ripristino delle emissioni sono di solito disabilitate se state usando moderne emulazioni di terminale Lo standard xterm supporta in modo predefinito Ctrl S e Ctrl Q 12 1 2 Uso dei segnali con kill La maggioranza delle moderne shell Bash compresa hanno una funzione kill integrata In Bash sia i nomi che i numeri dei segnali vengono accettati come opzioni e gli argomenti potrebbero essere un lavoro job o un ID di processo Si pu rivere uno stato d uscita utilizzando l opzione 1 zero quando almeno un segnale stato inviato con successo diverso da zero se capitato un errore Impiegando il comando kill da usr bin il vostro sistema potrebbe abilitare delle opzioni extra come ad esempio la capacit di uccidere processi con altro ID di utente rispetto al vostro e di specificare i processi per nome come con pgrep e pkill Entrambi i comandi kill inviano il segnale TERM se nessuno viene indicato Questo un elenco dei segnali pi comuni Tabella 12 2 Nome segnale Valore segnale Effetto SIGHUP 1 Aggancia SIGINT 2 Interruzione da tastiera SIGKILL 9 Segnale di kill Capitolo 12 Cattura dei segnali 163 Nome segnale Valore segnale Effetto SIGTERM 15 Segnale di terminazione SIGSTOP 17 19 23 Ferma il processo e SIGKILL e SIGSTOP SIGKILL e SIGSTOP non possono essere intercettati bloccati o ignorati Quando si uccide un processo o una serie
150. irettamente nella shell senza dover ricorrere ad un programma esterno Capitolo 4 Le espressioni regolari 77 Come gi sapete l asterisco e il punto di domanda corrispondono rispettivamente a qualsiasi stringa ed a qualsiasi singolo carattere Ponete fra apici questi caratteri speciali per farli corrispondere alla lettera cathy gt touch Calva eis AI Potete usare anche le parentesi quadre per confrontare ogni carattere o intervallo di caratteri inclusi se le coppie di caratteri sono separati da un trattino Un esempio cathy gt ls 1d a cx z Arwxr xr x 2 Qaway cathy 4096 Jul 20 2002 app defaults Arwxrwxr x 4 cathy cathy 4096 May 25 2002 arabic dArwxrwxr x 2 cathy cathy 4096 Mar 4 18 30 bin Arwxr xr x 7 cathy cathy 4096 Sep 2 2001 crossover drwxrwxr x 3 cathy cathy 4096 Mar 22 2002 xml RI CATZ RE Ci elenca tutti i file nella directory personale di cathy iniziando da a b c x y o z Hpr Se il primo carattere tra parentesi o verr comparato qualsiasi carattere non incluso Per confrontare il trattino includetelo come primo o ultimo carattere dell insieme L ordinamento dipende dall ambiente corrente e dal valore della variabile LC_COLLATE se impostata Ricordatevi che altri ambienti potrebbero interpretare a cx z come aBbCcXxYyZz se l ordinamento viene eseguito in ordine del dizionario Se volete essere sicuri di avere l interpretazione tradizionale degli in
151. itato e disabilitato con i comandi alias e unalias Bash legge sempre almeno una linea di ingresso completa prima di eseguire uno qualsiasi dei comandi di quella linea Gli alias vengono espansi quando viene letto un comando non quando viene eseguito Quindi una definizione di alias che appare nella stessa linea come altro comando Capitolo 1 Bash e gli script di Bash 19 non ha alcun effetto finch non viene letta la successiva linea di ingresso I comandi che seguono la definizione dell alias in quella linea non vengono influenzati dai nuovi alias Gli alias vengono espansi quando viene letta una definizione di funzione non quando viene eseguita la funzione perch una definizione di funzione di per s stessa un comando composto Di conseguenza gli alias definiti in una funzione non sono disponibili solo dopo che la funzione eseguita Discuteremo degli alias in dettaglio nella Sezione 3 5 1 2 2 7 Le matrici Bash fornisce variabili di matrici monodimensionali Qualsiasi variabile pu essere usata come una matrice l integrato declare dichiarer esplicitamente una matrice Non esiste limite massimo della dimensione di una matrice e neppure un qualche requisito che i membri vengano indicizzati o assegnati in modo contiguo Le matrici partono dallo zero V Capitolo 10 1 2 2 8 Pila di directory La pila di directory directory stack un elenco delle directory visitate di recente L integrato pushd aggiunge dir
152. ivo Gli script init nel vostro sistema usano spesso la tecnica di interrogare la variabile RETVAL in un test condizionale proprio come questo if RETVAL eq 0 then lt avvia il demone gt O come questo esempio dallo script etc init d amd in cui vengono utilizzate le funzioni di ottimizzazione di Bash RETVAL 0 amp amp touch var lock subsys amd I comandi dopo amp amp vengono eseguiti solo quando il test prova di essere vero questo un modo pi breve per rappresentare una struttura if then fi Il codice di ritorno della funzione spesso utilizzato come codice d uscita dell intero script Vedrete una quantit di initscript terminanti in qualcosa di simile a exit RETVAL 11 1 4 Mostrare le funzioni Tutte le funzioni note alla shell corrente possono essere mostrate usando l integrato set senza opzioni Dopo l utilizzo le funzioni vengono conservate a meno che non venga usato unset su di loro dopo l uso Anche il comando which mostra le funzioni lydia cointreau which zless ZSSS Te el EUNET zless yA cat oeu LUIS PA GHRAI lydia cointreau echo PAGER less Questo il tipo di funzione che viene tipicamente configurata nei file di configurazione delle risorse di shell dell utente Le funzioni sono pi flessibili rispetto agli alias e forniscono un modo semplice e facile per adattare l ambiente dell utente Ecco qui una per gli utenti DOS oblio 0 la lt P color a
153. l file da convertire sandy gt cat test lineal linea2 linea3 Di pi sui parametri posizionali nel Capitolo 7 sandy gt txt2html sh test conversione test finito sandy gt cat test lt htm1l gt lt head gt lt title gt html generato da sed lt title gt lt head gt lt body bgcolor fffff gt lt pre gt lineal linea2 linea3 lt pre gt lt body gt lt html gt Capitolo 5 L editor di flussi GNU sed 85 sandy gt Questo non come dovrebbe essere fatto in realt tale esempio dimostra solamente delle capacit di sed Guardate la Sezione 6 3 per una soluzione pi decente di questo problema utilizzando i costrutti BEGIN e END di awk sed facile Gli editor avanzati con supporto della evidenziazione della sintassi sono in grado di riconoscere la sintassi di sed Ci pu risultare di grande aiuto se tendete a dimenticare barre inverse e simili 5 4 Sommario L editor di flussi sed uno strumento potente a linea di comando che ha la capacit di maneggiare flussi di dati pu ricevere linee in ingresso da un incanalamento pipe Ci lo rende adatto ad un uso non interattivo L editor sed usa comandi simil vi ed accetta espressioni regolari Lo strumento sed pu leggere comandi da linea di comando o da uno script Viene utilizzato spesso per eseguire delle operazioni cerca e sostituisci su linee contenenti un modello 5 5 Esercizi Questi esercizi sono diretti a d
154. l serio Uscendo Grazie per la visita allo Zoo speriamo di vedervi presto di nuovo michel test gt cibo sh mela Uso dello script cibo cibo sh cibo in menu nome animal Si pu trovare di pi sui caratteri escape nella Sezione 3 3 2 La tabella seguente offre una panoramica delle sequenze riconosciute dal comando echo Tabella 8 1 Sequenze di escape utilizzate dal comando echo Sequenza Significato a Allarme campanello b Spazio indietro o backspace c Sopprime i nuovalinea in mezzo al testo e Escape f Form feed n Nuovalinea r Ritorno carrello o CR Carriage Return t Tabulazione orizzontale v Tabulazione verticale Barre inverse ONNN Il carattere a otto bit il cui valore il valore ottale NNN da zero a tre cifre ottali Capitolo 8 Redigere script interattivi 116 NNN Il carattere a otto bit il cui valore il valore ottale NNN da una a tre cifre ottali xHH Il carattere a otto bit il cui valore il valore esadecimale una o due cifre esadecimali Per maggiori informazioni sul comando printf ed il modo in cui vi consente di formattare le emissioni v le pagine info di Bash Tenete in mente che potrebbero esserci delle differenze tra le diverse versioni di Bash 8 2 Cattura dell immissione dell utente 8 2 1 Uso del comando integrato read Il comando integrato read la contropartita dei comandi echo e pri
155. lari sono utilizzate nel foglio elettronico Excel che viene fornito con la suite Microsoft Windows Office In questo capitolo abbiamo preso confidenza con il comando grep che fondamentale in qualsiasi ambiente UNIX Il comando grep pu fare di pi rispetto ai pochi compiti che qui abbiamo tratttato l abbiamo usato soltanto come esempio per le espressioni regolari La versione GNU di grep giunge con dovizia di documentazione che siete caldamente consigliati di leggere Bash ha delle funzionalit integrate per comparare modelli e pu riconoscere classi e intervalli di caratteri 4 5 Esercizi Questi esercizi vi aiuteranno a padroneggiare le espressioni regolari 1 Mostrate un elenco di tutti gli utenti nel vostro sistema che si sono autenticati con la shell Bash come predefinita 2 Dalla directory etc group mostrate tutte le linee che iniziano con la stringa daemon 3 Stampate tutte le linee dallo stesso file che non contengono la stringa precedente 4 Mostrate le informazioni di localhost dal file etc hosts il numero di linee che soddisfano la stringa di ricerca e contate quante volte ricorre la stringa 5 Mostrate un elenco delle sottodirectory usr share doc contenenti informazioni sulla shell 6 Queste sottodirectory quanti file README contengono Non contate nulla che abbia la forma di README una_ stringa 7 Fate un elenco dei file della vostra directory personale che sono stati modificati meno di
156. li alias e In assenza di trappole il segnale SIGTERM viene ignorato e In assenza di trappole il segnale SIGINT viene viene intercettato e gestito Quindi per esempio battendo Ctrl C non si interromper la vostra shell interattiva L invio di segnali SIGHUP a tutti i processi viene configurato tramite l opzione huponexit e I comandi vengono eseguiti su lettura e Bash controlla periodicamente la posta e Bash pu essere configurata per terminare quando incontra variabili non referenziate Nella modalit interattiva questo comportamento disabilitato e Quando i comandi integrati della shell incontrano errori di redirezione ci non determina l uscita della shell e Comandi integrati speciali che restituiscono errori in modalit POSIX non determinano l uscita della shell Questi sono elencati nella Sezione 1 3 2 Il fallimento di exec non far uscire la shell Il semplice controllo ortografico per gli argomenti dell integrato cd viene abilitato in partenza e Viene abilitata l uscita automatica dopo la scadenza del periodo specificato nella variabile TMOUT Maggiori informazioni e Sezione 3 2 Capitolo 1 Bash e gli script di Bash 18 Sezione 3 6 e v Capitolo 12 per un di pi sui segnali Sezione 3 4 tratta le varie espansioni eseguite con l inserimento di un comando 1 2 2 4 Le espressioni condizionali Le espressioni condizionali vengono usate dal comando composto e da test
157. li di gawk Mentre awk sta elaborando il file immesso usa diverse variabili Alcune sono modificabili altre a sola lettura 6 3 1 Il separatore di campi immessi Il separatore di campi che pu essere sia un singolo carattere sia un espressione regolare controlla il modo in cui awk spezzettata in campi un record immesso Il record immesso viene scandito alla ricerca di sequenze di caratteri che corrispondano alla definizione del separatore i campi stessi sono il testo tra le corrispondenze Il separatore di campi viene rappresentato nella variabile integrata FS Notate che questa un po diversa dalla variabile IF S usata dalle shell aderenti a POSIX Il valore della variabile del separatore di campi pu essere cambiata nel programma in awk con Capitolo 6 Il linguaggio di programmazione GNU awk 92 l operatore di assegnazione Spesso il momento giusto per fare ci all inizio dell esecuzione prima che qualsiasi immissione sia stata elaborata cosicch proprio il primo record viene letto con il corretto separatore Per fare questo usate il modello speciale BEGIN Nell esempio sottostante realizziamo un comando che mostri tutti gli utenti nel vostro sistema con una descrizione kelly is in gt awk BEGIN FS print 1 t 5 etc passwd output omitted kelly Kelly Smith franky Franky B eddy Eddy White willy William Black cathy Catherine the Great sandy Sandy Li Wong kelly is i
158. ll a leggere l immissione dalla sorgente corrente fino a che non viene trovata una linea contenente solo la stringa di ricerca senza spazi vuoti in mezzo Tutte le linee lette fino a quel punto vengono poi usate come immissione standard per un comando Il risultato che non vi serve chiamare file separati potete usare i caratteri speciali della shell e lo script sembrer pi grazioso rispetto ad un mucchio di echo michel gt cat inizionavigazione sh bin bash Questo script fornisce agli utenti un modo semplice per scegliere tra i navigatori echo Questi sono i programmi di navigazione internet di questo sistema Capitolo 8 Redigere script interattivi 125 Inizia il documento here cat lt lt BROWSERS mozilla links lynx konqueror opera NETSCAPE BROWSERS Fine del documento here echo n Quale preferisci read browser echo Avvio browser attendi per favore browser amp michel gt inizionavigazione sh Questi sono i programmi di navigazione internet di questo sistema mozilla links lynx konqueror opera Ne estane Quale preferisci opera Avvio opera attendi per favore Sebbene si parli di un documento here si suppone che si tratti di un costrutto all interno dello stesso script Questo un esempio che installa automaticamente un pacchetto anche se normalmente dovreste confermare bin bash Questo script installa i pacchetti automaticamente usando yum
159. lla variabile La tabella qui sotto offre una panoramica di queste semplici variabili di shell Tabella 3 1 Variabili riservate della shell Bourne Nome della variabile Definizione Un elenco di directory separato dai due punti e utilizzato quale CDPATH peg A percorso di ricerca per il comando integrato cd La directory personale home dell utente corrente quella predefinita per HOME l integrato cd Il valore di questa variabile usato anche per l espansione della tilde Un elenco di caratteri che separano dei campi utilizzato quando la shell suddivide le parole come parte di un espansione IFS Se questo parametro definito con un nome di file e la variabile MAIL MAILPATH non impostata Bash informa l utente dell arrivo di posta nel file specificato Un elenco di nomi di file separato dai due punti che la shell controlla MAILPATH an periodicamente per nuova posta Capitolo 3 L ambiente di Bash 52 OPTARG Il valore dell ultimo argomento di opzioni elaborato dall integrato getopts OPTIND L indice dell ultimo argomento di opzioni elaborato dall integrato ri getopts PATH Un elenco di directory separato dai due punti in cui la shell cerca dei comandi PSI La stringa primaria dell invito prompt Il valore predefinito s v PS2 La stringa secondaria dell invito prompt Il valore predefinito gt 3
160. lli aa 78 A SOMMA Oil iaia lid La EEE E a 79 4 5ESCICiZia orrori 79 Capitolo 5 L editor di flussi GNU sedi aiical elia 80 5 1 INoduzione aem ea r a a a a E E a a Ra 80 5alT CGhe cosase sed nella nile ia ile lani le lielienta 80 5 f 2 Ieomandrdi sedi paola 80 5 2 Moditica interativa indiani 81 5 2 1 Stampa delle linee contenenti un modello csererrrrrrererirereczeneree nere nioroninioni 81 5 2 2 Cancellazione delle linee in ingresso contenenti un Modello 82 5 23 intervalli need 82 5 2 4 Cerca e s stit rsci CON Seli ie ao a 83 5 3 Modifiche noivinterattive pillole alal 84 5 3 1 Lettura dei comandi di sed da un file oerrrerrrcrrrrerereree cere senz eeere sione serene cenionecee 84 5 3 2 Scrittura dei file dei dati in Uscita scri 85 Da SOMMATO sprint eine LANA REA IRAN IERI RI 86 SOIA PRIMI AREA TROIA I RIC ORA I 86 Capitolo 6 Il linguaggio di programmazione GNU awk ii 88 6 1 Introduzione Pialle 88 OLI COS ela 88 6 1 2 Leomandi di gawlk rio iaia 89 6 2 programma pillola alari 89 6 2 1 Stampa di cammpisselezionalliitar tica 89 6 2 2 Formattalre L Campl alare ala 90 6 2 3 Il comando print e le espressioni regolari eesrrerrrrrrrrereseree nere nine nice nienicenionie 91 60 24 M d lli speciali rile DIRI 92 CE 5cGiseiplneoaWkcasicelile lai 93 0 0 Levanabili dipaWia ola iene 93 6 3 1 Il separatore di campi IMMESS
161. lp cat penguin sh bin bash This script lets you when given a fish then Hmmmmmm fish Tux happy like that Tux wants fish penguin sh apple x don t like that Tux wants fish penguin sh fish Hmmmmmm fish Tux happy i Figura 7 1 Controllo di un argomento a linea di comando con if Ecco qui un altro esempio che usa due argomenti anny gt cat peso sh bin bash Questo script stampa un messaggio sul vostro peso se glielo date in chili e l altezza in centimetri peso 1 altezza 2 pesoideale s Saltezza 110 if Speso le pesoideale then echo Dovreste mangiare un poco di grassi in pi else echo Dovreste mangiare un poco di frutta in pi Tal anny gt bash x peso sh 55 169 peso 55 altezza 169 pesoideale 59 T Yf 55 le 59 echo dovreste mangiare un poco di grassi in pi Dovreste mangiare un poco di grassi in pi 7 2 1 3 Controllo del numero degli argomenti L esempio seguente mostra come modificare lo script precedente in modo che stampi un messaggio se vengono forniti pi o meno di due argomenti anny gt cat peso sh bin bash Questo script stampa un messagio sul vostro peso se glielo date in chili e l altezza in centimetri if then echo Uso 0 peso in kili altezza_in centimetri Capitolo 7 Istruzioni condizionali 105 exit iCal peso 1 altezza 2 pesoideale S Saltezza 110
162. mandi possono essere delle funzioni di shell degli integrati di shell dei comandi UNIX e altri script Attribuite al vostro script un nome confacente che suggerisca ci che lo script produce Accertatevi che il nome dello script non confligga con comandi esistenti Per assicurarvi che non si possa creare confusione i nomi degli script spesso terminano in sh anche cos ci potrebbero essere altri script nel vostro sistema con lo stesso nome di quello che avete scelto Verificate usando which whereis e altri comandi per la ricerca di informazioni su programmi e file which a script_name whereis script_name locate script_name 2 1 2 scriptl sh In questo esempio usiamo l integrato di Bash echo per informare l utente su cosa sta per avvenire prima che venga eseguito il compito che creer il risultato Si consiglia vivamente di informare gli utenti su cosa sta facendo uno script per evitare che si innervosiscano perch lo script non sta facendo niente Ritorneremo sull argomento della comunicazione con gli utenti nel Capitolo 8 Capitolo 2 Scrivere e correggere gli script 33 V script1l sh GVIM m ira H D E bin fbash clear The script starts now Hi SUSER I will now fetch you a list of connected users I m setting two variables now COLOUR black VALUE 9 echo This is a string COLOUR echo And this is a number VALUE echo echo I m giving you back your prompt now
163. mando printf pu essere usato per specificare la lunghezza del campo da utilizzare per ciascuna voce cos come varie scelte di formato per i numeri come quale base di emissione impiegare se stampare un esponente se stampare un segno e quante cifre stampare dopo la virgola decimale Ci si fa fornendo una stringa chiamata stringa di formato che controlla come e dove stampare gli altri argomenti La sintassi la stessa dell istruzione printf del linguaggio C v la vostra guida introduttiva del C Le pagine info di gawk contengono spiegazioni esaurienti 6 4 Sommario Il programma di utilit gawk interpreta un linguaggio di programmazione dagli scopi speciali gestendo delle semplici mansioni di riformattazione dei dati con appena una manciata di linee di codice E la versione libera del generale comando awk di UNIX Questo strumento legge linee di dati immessi e pu riconoscere facilmente le emissioni in colonna Il programma print il pi comune per il filtraggio e la riformattazione di campi definiti La dichiarazione al volo di variabili diretta e consente semplici calcoli di somme statistiche ed altre operazioni sul flusso dei dati immessi Variabili e comandi si possono inserire negli script awk per l elaborazione di sottofondo background processing Altre cose che dovreste conoscere di awk I linguaggio resta ben conosciuto su UNIX e simili ma per l esecuzione di compiti simili ora si utilizza pi frequen
164. me 20 echo ZI 22 echo VOnesto cucco gencat Uno script inizia sempre con gli stessi due caratteri Dopo di ci definita la shell che eseguir i comandi susseguenti la prima linea Questo script inizia alla linea 2 con la ripulitura dello schermo La linea 3 fa s che stampi un messaggio informante l utente su cosa sta per avvenire La linea 5 saluta l utente Le linee 6 9 13 16 e 20 si trovano l solo a scopo di mostrare i risultati in modo ordinato La linea 8 stampa la data attuale ed il numero della settimana La linea 11 nuovamente un messaggio informativo come le linee 3 18 e 22 La linea 12 formatta il risultato di w la linea 15 mostra le informazioni sul sistema operativo e la CPU La linea 19 offre le informazioni di uptime e del carico Sia echo che printf sono dei comandi Bash integrati Il primo esce sempre con uno stato 0 e stampa semplicemente argomenti seguiti da un carattere di fine linea End Of Line o EOL mentre il successivo permette di definire una stringa di formattazione e d in caso di fallimento un codice di stato di uscita diverso da zero Questo lo stesso script che utilizza l integrato printf tom gt cat n miosistema sh bin bash clear printf Queste sono informazioni sono fornite da miosistema sh Il programma Talaia Orfas Wall printi Gilao SUS Na A printf La data odierna date questa la settimana n date V n n pr
165. mettere fuori il bidone della spazzatura bin bash Calcola il numero della settimana usando il comando date NUMSETTIMANA S date V 2 Controlla se abbiamo un resto Se non c questa una settimana pari e perci invia un messaggio In caso contrario non fa nulla if SNUMSETTIMANA eq 0 then echo Domenica sera metti fuori i bidoni della spazzatura mail s Bidoni spazzatura fuori vour your_ domain fi Capitolo 7 Istruzioni condizionali 102 7 1 2 3 Confronti di stringhe Un esempio di confronto tra stringhe per provare l ID utente ag Since e l teo Ty Caen echo Non hai il permessso di avviare 0 in quanto utente non root eae ILg ici Con Bash potete abbreviare questo tipo di costrutto L equivalente compatto della prova soprastante come segue whoami root amp amp echo stai usando un account non privilegiato exit 1 Simile all espressione che indica cosa fare se la prova da per risultato vero specifica cosa fare se la prova d falso Si possono usare anche le espressioni condizionali nei confronti anny gt genere femminile anny gt if genere f Ancora immissione gt then echo Piacere di conoscerla Signora fi Piacere di conoscerla Signora anny gt Veri programmatori La maggior parte dei programmatori preferisce usare il comando integrato test che equivale all uso delle parentesi quadre per
166. momento che qui non facciamo un conteggio delle linee non c modo di conoscere il numero di linea da cui iniziare a cancellare linee fino a che si raggiunge il termine Il problema si risolve usando tac che rovescia le linee in un file i Il comando basename Invece di usare sed per sostituire il suffisso html con php sarebbe pi corretto utilizzare il comando basename Leggete le pagine man per maggiori informazioni Strani caratteri Finirete nei guai se la lista si espande ai nomi dei file contenenti spazi ed altri caratteri irregolari Un costrutto pi ideale per ottenere la lista sarebbe quello di utilizzare la funzione di globbing della shell come questa for i in SPATHNAME do comandi done Capitolo 9 Compiti ripetitivi 130 9 2 Il ciclo while 9 2 1 Cos Il costrutto while permette l esecuzione ripetuta di una lista di comandi fintanto che il comando che controlla il ciclo while viene eseguito con successo stato di uscita zero La sintassi while COMANDO CONTROLLO do COMANDI CONSEGUENTI done COMANDO CONTROLLO pu essere qualsiasi comando che pu uscire con uno stato di successo o fallimento COMANDI CONSEGUENTI pu essere qualsiasi programma script o costrutto di shell Non appena COMANDO CONTROLLO fallisce il ciclo esce n uno script viene eseguito il comando successivo all istruzione done Lo stato di ritorno lo stato d uscita dell ultimo comando COMANDI CONSEGUENTI oppure zero
167. ms lt jane example com gt Eric S Raymond lt esr example com gt Larry Wall lt wall example com gt Linus Torvalds lt linus example com gt Count the number of possible testers Loop until we find an empty string count 0 while x wholist count x do count S Scount 1 done Now we calculate whose turn it is week date W The week of the year 0 53 week week 0 Remove possible leading zero let index week count week modulo count the lucky person email wholist index Get the lucky person s e mail address echo email Output the person s e mail address Tale script viene poi usato in altri script come questo che utilizza un documento here mail get tester address sh Trova a chi mandare una e mail hostname hostname Nome di questa macchina Invia una e mail alla persona giusta mail Semail s Demo Testing lt lt EOF The lucky tester this week is email Reminder the list of demos is here http web example com 8080 DemoSites Capitolo 10 Di pi sulle variabili 149 Questa e mail stata generata da 0 su hostname EOF 10 3 Operazioni su variabili 10 3 1 Aritmetica con le variabili Abbiamo gi trattato di questo nella Sezione 3 4 6 10 3 2 Lunghezza di una variabile x Usando la sintassi VAR si calcoler il numero dei caratteri in una variabile Se VAR
168. n gt In uno script awk potrebbe apparire come questo kelly is in gt cat printnames awk BEGIN FS t omine Sl UNE 85 1 kelly is in gt awk f printnames awk etc passwd QUiepuiegionitzeea na Scegliete con attenzione il campo di immissione per evitare problemi Un esempio per illustrare ci cercate di avere un immissione in forma di linee che appaia simile a questa Sandy L Wong 64 Zoo St Antwerp 2000X Scrivete una linea di comando o uno script che stampi il nome della persona in quel record awk BEGIN FS print 1 2 3 F inputfile Ma una persona potrebbe essere laureata e il record potrebbe essere scritto in questo modo Sandy L Wong PhD 64 Zoo St Antwerp 2000X Il vostro awk fornir un emissione errata per questa linea Se necessario usate un awk o sed extra per uniformare i formati di immissione dei dati Il separatore dei campi in ingresso predefinito uno o pi spazi bianchi o tabulazioni 6 3 2 separatori di emissione 6 3 2 1 Il separatore dei campi in emissione Normalmente i campi sono separati da spazi nell emissione Ci diventa chiaro quando usate la sintassi corretta per il comando print dove gli argomenti vengono separati da virgole Capitolo 6 Il linguaggio di programmazione GNU awk 93 kelly octarine test gt cat test recordl datal record2 data2 kelly octarine test gt awk print 1 2 test recordldatal record2data2 kelly octarine
169. n bash Per passare da una shell all altra basta inserire il nome della nuova shell nel terminale attivo Il sistema trova la directory dove ricorre il nome utilizzando le impostazioni di PATH e dal momento che la shell un file eseguibile programma l attuale shell l attiva ed essa viene eseguita Normalmente viene mostrato un nuovo invito prompt poich ogni shell ha la propria tipica apparenza mia gt tcsh mia post21 1 2 Vantaggi della Bourne Again Shell 1 2 1 Bash la shell GNU Il progetto GNU GNU s Not UNIX fornisce strumenti per l amministrazione di sistemi simil UNIX che sono software libero e aderente agli standard UNIX Bash una shell compatibile con sh che incorpora utili funzionalit provenienti dalle shell Korn ksh e C csh E progettata per conformarsi allo standard IEEE POSIX P1003 2 I1SO 9945 2 Shell and Tools Offre miglioramenti funzionali rispetto a sh sia per la programmazione che per l uso interattivo ci comprende la scrittura a linea di comando una cronologia dei comandi dalle dimensioni illimitate il controllo dei job funzioni di shell e alias matrici indicizzate di dimensione illimitata e un aritmetica degli interi in qualsiasi base da due a sessantaquattro Bash pu far girare la maggior parte degli script sh senza modifiche Come gli altri progetti GNU l iniziativa bash iniziata per mantenere proteggere e promuovere la libert di uso studio copia modifica e redist
170. ne questa non sia la shell standard ancora disponibile in ogni sistema Linux per compatibilit con i programmi UNIX bash o Bourne Again Shell la shell GNU standard intuitiva e flessibile Probabilmente molto consigliabile agli utenti principianti pur essendo allo stesso tempo uno strumento potente per gli utenti avanzati e professionali In Linux bash la shell standard per gli utenti comuni Questa shell un cosiddetto superset della shell Bourne un insieme di aggiunte e plug in Ci significa che la Bourne Again Shell compatibile con la Bourne i comandi che funzionano con sh Capitolo 1 Bash e gli script di Bash 13 funzionano pure con bash e csh o C shell la sintassi di questa shell a quella del linguaggio di programmazione C Talvolta ricercata dai programmatori e tcsh o TENEX C shell un superinsieme della comune C shell con miglioramenti nella facilit d uso e nella velocit Questo il motivo per cui qualcuno la chiama Turbo C shell e ksh o Korn shell talvolta apprezzata da persone con esperienze UNIX Un superinsieme della Bourne shell in configurazione standard un incubo per gli utenti principianti Il file etc shells offre una panoramica delle shell conosciute in un sistema Linux mia gt cat etc shells bin bash bin sh bin tesh bin csh La vostra shell predefinita impostata nel file etc passwd come in questa linea dell utente mia mia L2NOfgdlPrHwE 504 504 Mia Maya home mia bi
171. nea sandy lt gt Inserite una stringa qualsiasi alla fine di ogni linea sandy gt sed s EOL esempio Questa la prima linea di un testo di esempio EOL E un testo con erori EOL olti erori EOL Cos tanti erori Tutti questi erori mi fanno impazzire EOL Questa una linea che non contiene errori EOL Questa l ultima linea EOL sandy lt gt I comandi multipli di ricerca e sostituzione sono separati con singole opzioni e sandy gt sed e s erori errori g e s ultima ultimissima g esempio Questa la prima linea di un testo di esempio E un testo con errori lita errori Cos tanti errori Tutti questi errori mi fanno impazzire Questa una linea che non contiene errori Questa l ultimissima linea sandy lt gt Tenete in mente che normalmente sed stampa i suoi risultati nell uscita standard molto probabilmente la vostra finestra di terminale Se desiderate salvare in un file i dati in uscita redirigeteli sed opzione qualche espressione file da elaborare gt sed uscita verso_un file L Ulteriori esempi Esempi in quantit su sed si possono trovare negli script di avvio della vostra macchina che normalmente si trovano in etc init doin etc rc d init d Spostatevi nella directory contenente gli initscript del vostro sistema e impartite il comando seguente grep sed 5 3 Modifiche non interattive 5 3 1 Lettura dei comandi di sed da un file Si
172. nere anche delle cifre ma non permesso un nome che inizi con numeri prompt gt export lnumber 1 bash export Iamuidger i 3 sno a valse scemi Per impostare una variabile nella shell usate Capitolo 3 L ambiente di Bash 50 VARNAME valore L inserimento di spazi attorno al segno uguale causer degli errori E una buona usanza virgolettare le stringhe quando si assegnano dei valori alle variabili ci ridurr le possibilit di sbagliare Alcuni esempi utilizzando maiuscole e minuscole numeri e spazi franky gt MYVAR1 2 franky gt echo MYVAR1 2 franky gt first_name Franky franky gt echo first_name Franky franky gt full_name Franky M Singh franky gt echo full_name Franky M Singh franky gt MYVAR 2 2 bash MYVAR 2 2 command not found franky gt MYVARI 2 bash MYVARI command not found franky gt MYVAR1 2 bash 2 command not found franky gt unset MYVARI1 first name full name franky gt echo MYVAR1 first_name full_ name LNO SLI Via Rraaniavalioo 3 2 3 Esportare variabili Una variabile creata come quelle dell esempio precedente disponibile soltanto nella shell corrente E una variabile locale i processi figli della shell corrente non si cureranno di questa variabile Per passare variabili ad una sottoshell abbiamo bisogno di esportarle utilizzando il comando integrato export Le variabili che vengono esportate sono definite com
173. ntazione del vostro sistema se i comandi che usano espressioni regolari supportano le espressioni estese 4 2 Esempi di utilizzo di grep 4 2 1 Cos grep grep ricerca nei file inseriti le linee contenenti la corrispondenza ad un determinato elenco di modelli Quando riscontra una coincidenza in una linea copia di consueto la linea nello standard output oppure in qualsiasi altro genere di dati in uscita voi abbiate richiesto con le opzioni Sebbene grep si aspetti di eseguire la comparazione su un testo non ha limiti nella lunghezza della linea in ingresso ad eccezione della memoria disponibile e pu comparare caratteri arbitrari all interno di una riga Se il byte finale di un file in ingresso non un nuovalinea grep ne fornisce uno in modo tacito Dal momento che un nuovalinea pure un separatore in un elenco di modelli non c modo di confrontare dei caratteri di nuovalinea in un testo Capitolo 4 Le espressioni regolari 74 Alcuni esempi cathy gt grep root etc passwd 00823030 roots inoes oin basia operator x 11 0 operator root sbin nologin cathy gt grep n root etc passwd Il sone sas 0g 03 root root s l oin sasn INF operator es NRO operaron y rooe bm nolo cathy gt grep v bash etc passwd grep v nologin syineszz9g0ssyaes Sora o1mn Syne shutdown x 6 0 shutdown sbin sbin shutdown malti 7 0 malta aona soa nio news x 9 13 news var spool news mailnull x 47 47 var spool mqueue d
174. nteractive shell Sezione 1 2 2 2 3 non login shell Sezione 1 2 2 2 2 numeric comparisons Sezione 7 1 2 2 O operatori aritmetici Sezione 3 4 7 operatori booleani Sezione 7 2 4 operatori delle espressioni regolari Sezione 4 1 2 Sezione 5 2 Sezione 6 2 4 opzioni Sezione 3 6 1 output field separator Sezione 6 3 2 1 output record separator Sezione 6 3 2 2 P parameter expansion Sezione 3 4 5 parametri posizionali Sezione 3 2 5 Sezione 11 1 3 parametri speciali Sezione 3 2 5 PATH Sezione 2 1 2 pattern matching Sezione 4 3 permessi di esecuzione Sezione 2 1 3 positionalparams Sezione 3 2 5 Sezione 11 1 3 POSIX Sezione 1 2 1 POSIX modalit Sezione 1 2 2 2 5 primary expressions Sezione 7 1 1 1 printenv Indice Sezione 3 2 1 1 printf Sezione 1 5 5 Sezione 6 3 6 process substitution Sezione 3 4 8 processo figlio Sezione 1 3 1 profile Sezione 3 1 2 3 prompt Sezione 3 1 3 Q quoting characters Sezione 3 3 R redirezione Sezione 1 4 1 7 Sezione 3 6 2 Sezione 8 2 3 Sezione 9 4 rbash Sezione 1 2 2 10 read Sezione 8 2 1 readonly Sezione 10 1 3 regular expression operators Sezione 4 1 2 Sezione 5 2 Sezione 6 2 4 regular expressions Sezione 4 1 remote invocation Sezione 1 2 2 2 6 removing aliases Sezione 3 5 2 reserved variables Sezione 3 2 4 return Sezione 11 1 3 S script interattivi Sezione 8 1 sed Sezione 5 1 sed comandi di modifica Sezione 5 1 2
175. ntero scoprirai 37 2 3 2 Correzione su parte i dello script sesesseeessessesseessessreseessessresersereseeseresseresseeesseeesseeess 38 ZA SOMnalo rulla A 40 26 ESFICIZI T EAA E E AER E EEAS 40 Capitolo 3 L ambiente di Bash 42 3 1 File di inizializzazione della shell aaria iaia naar 42 3 1 1 File di configurazione dell intero SIStemMa 42 3 1 2 I file di configurazione del singolo Utente srsctrrrrererenicereerere nici ne niorenizzonito 44 3 1 3 Cambiare i file di configurazione uragani 47 CAVE iE DI N iter 48 3 21 Tipi di variabili mae Arte ele 48 3 2 2 Creazione delle variabili soseeseseosessesoesesessessesessessesosscssesoseresesstessessresssesseesseessees 50 3 237 Esportare variabil inesse se eaa Aa E EE E EEA E E EEE a e ET 51 3 24 Variabili riservate eriiic ala aaa 52 3 2 5 Paramet sp cial e allude adi ia 56 3 2 6 Riciclo degli script con le variabili s cna iii 58 3 3 Caratteri tragli apiCi scere iar LI I LI EN 60 SERI eee ae 60 3 3 2 Garatteri diescape nse a i e iatale 60 3 39 Aya Cineo i EE E i TT 60 dad APIC r dOPDin nerie n a e a E a a ER EE 60 3 3 5 Virgolettatura ANSP Gensis oerset ai 61 3 3 6 Locali mirarea a ici 61 3 4 Espansione della shelli c amp the tua ale 61 3 4 1 generale ruoli ber istat 61 3 4 2 Espansione delle parentesi graffe orsrercrrreererere renze nere senze nere rinze nere senzenioizenice 62 3
176. ntf La sintassi del comando read la seguente read opzioni NOME1 NOME2 NOMEN Una sola linea viene letta dall immissione standard standard input o dal descrittore del file forniti come argomento all opzione u La prima parola della linea viene assegnata al primo nome NOME1 la seconda parola al secondo nome e cos via con le parole restanti e i loro relativi separatori assegnati all ultimo nome NOMEN Se ci sono meno parole da leggere nel flusso d ingresso rispetto ai nomi ai nomi restanti si assegnano dei valori vuoti I caratteri nel valore della variabile IFS vengono utilizzati per dividere la linea immessa in parole o frammenti token v Sezione 3 4 8 Il carattere barra inversa pu essere utilizzato per rimuovere qualsiasi significato speciale al successivo carattere da leggere e per la prosecuzione della linea Se non vengono forniti nomi la linea da leggere viene assegnata alla variabile REPLY Il codice di ritorno del comando read zero a meno che non sia stato incontrato un carattere di fine file EOF o end of file se read andato fuori tempo time out o se stato fornito un descrittore dei file invalido come argomento dell opzione u L integrato di Bash read supporta le seguenti opzioni Tabella 8 2 Opzioni dell integrato read Opzione Significato Si assegnano le parole a indici sequenziali della variabile matriciale ANAME a ANAME iniziante per 0 Tutti gli elementi vengono rimossi da A
177. nti argomenti desiderino In tali casi gli argomenti vengono normalmente elaborati in un ciclo while con una condizione di verifica pari a Questa condizione vera per tutto il tempo che il numero degli argomenti maggiore di zero La variabile 1 e l istruzione shift fanno elaborare ogni elemento Il numero degli argomenti viene ridotto ogni volta che shift viene eseguito e finalmente diventa zero al che il ciclo while termina L esempio sottostante pulizia sh usa istruzioni shift per elaborare ogni file nella lista generata Capitolo 9 Compiti ripetitivi 140 da find bin bash Questo script pu cancellare file usati per l ultima volta oltre USOTMUS ERE OR INI 1 f S 0 tben echo S USO exit l aL while S do ii I ds S19 UN jg then echo Directory vuota niente da fare else find 1 type f a atime 365 xec rm i fi shift done 7 exec vs xargs Il comando find soprastante pu essere con il seguente find opzioni xargs comandi da_eseguire_sui_file_trovati Il comando xargs costruisce ed esegue linee di comandi dall immissione standard Questo ha il vantaggio che la linea di comando viene riempita fino a raggiungere il limite del sistema Soltanto dopo verr chiamato il comando da eseguire nell esempio soprastante questo dovrebbe essere rm Se ci sono pi argomenti verr utilizzata una nuova linea di comando fino a che questa sar piena o finch non ci s
178. nti attualmente connessi Le due variabili d esempio vengono impostate e mostrate clear pulisce la finestra di terminale echo Lo script inizia adesso CCM Grtn USERA Il segno dollaro si usa per ottenere il contenuto di una variabile echo echo Ora ti invio un elenco degli utenti connessi echo Ww mostra chi collegato echo cosa sta facendo echo Adesso sto impostando due variabili COLORE nero imposta una variabile locale di shell VALORE 9 imposta una variabile locale di shell echo Questa una stringa COLORE mostra il contenuto della variabile echo E questo un numero VALORE mostra il contenuto della variabile echo CECO oo Siae CORO echo In uno script decente le prime righe sono normalmente dei commenti su ci che ci aspetta Poi ciascun grosso pezzo di comandi verr commentato secondo necessita per ragioni di chiarezza Gli script init di Linux per esempio nella vostra directory di sistema init d di solito sono ben commentati dal momento che devono essere leggibili e modificabili da chiunque faccia funzionare Linux 2 3 Caccia agli errori negli script Bash 2 3 1 Correzioni nell intero script Quando le cose non procedono secondo i piani dovete stabilire esattamente cosa determini lo script a sbagliare Bash fornisce estese funzionalit per la caccia agli errori
179. ntrabili solo in bash luana 15 lk S Esecuzione dei Conandis ella r bia a EEE EREE Esae Teee 21 1 lein penerale eorn a a e a e a r e E a a ai 21 1 3 2 Comandi integrati della ShEll csrerererrerererere nie rece rizzo nere senienenio rece nie nice nio recinzione 22 1 3 3 Esecuzione di programmi da uno SCript errcerrrrrrrcere senza nere si eee nere senzenienzenicenee 22 1 4 Costruzione di blocchi easlhize tia a ear e i ii 23 1 4 1 Costruzione di blocchi di shell icaro 23 1 5 SVviluppare DU0niSCHpt elio iaia 26 L5dsPropretadeDuonbsthn pt ee italia bia 26 1 5 2 SUTURA 26 L 50 Terminologia ie rale nana 26 1 5 4 Una parola su ordine e logica anal aaa 27 1 5 5 Un esempio di script di Bash miosistema Sh ii 27 5 60 ESeMpiodEStr prints iI n 29 1 6 SOMMATO isisisi aiei ee aiaia ai aci iii 30 IEAA T e A E EA EA E E A E lia conii ia A la E 30 Capitolo 2 Scrivere e correggere gli stipla archi 32 2 1 Creare ed avviare uno SED air AR ei RETI oa 32 2 1 1 Scrittura e UEMOMINAZIONE lilla 32 2 1 2 Spt Shireen E n E E O E E O E ERE EASE 33 2 1 3 Esecuzione dello Scripti ree er aee T aE a Ea Taa RATTI 35 22 Le basidegli sciiple nelle A a Ea 36 2 2 1 Quale shell eseguir lo script eeesseseeessessesseesorsseeseessrsseesoessesseessseeessoressoeessseersseesse 36 2 2 2 Aggiungere comment paratia alia 36 2 3 Caccia agli errori negli script Bash ali 37 2 3 1 Correzioni nell i
180. ntroduttivo descriveremo alcune shell comuni evidenzieremo i vantaggi e le caratteristiche della Bash GNU descriveremo i blocchi di costruzione della shell tratteremo i file di inizializzazione di Bash vedremo come la shell esegue i comandi osserveremo alcuni semplici esempi di script 1 1 Comuni programmi della shell 1 1 1 Funzioni generali di shell Il programma UNIX di shell interpreta i comandi degli utenti che vengono impartiti direttamente dall utente o che possono essere letti da un file chiamato script di shell o programma di shell Gli script di shell sono interpretati non compilati La shell legge i comandi dallo script riga per riga e cerca quei comandi nel sistema v Sezione 1 2 mentre un compilatore converte un programma in un formato leggibile dalla macchina un file eseguibile che poi potrebbe essere utilizzato in uno script di shell A parte il passaggio dei comandi al kernel il compito principale di una shell di fornire un ambiente per l utente che pu essere configurato individualmente usando i file di configurazione delle risorse di shell 1 1 2 Tipi di shell Proprio come le persone che conoscono differenti linguaggi e dialetti il vostro sistema UNIX normalmente offrir una variet di tipi di shell sh o Bourne Shell la shell originale ancora utilizzata nei sistemi UNIX e nei loro relativi ambienti Questa la shell base un piccolo programma con poche funzionalit Sebbe
181. o 6 Il linguaggio di programmazione GNU awk In questo capitolo discuteremo di Cos gawk Uso dei comandi di gawk nella linea di comando Come formattare il testo con gawk Come gawk usa le espressioni regolari Gawk negli script Gawk e variabili Per renderlo pi divertente Come con sed sono stati scritti libri interi sulle varie versioni di awk Questa introduzione lontana dall essere esaustiva ed intesa solo per la comprensione degli esempi nei capitoli seguenti Per maggiori informazioni meglio iniziare con la documentazione allegata a GNU awk GAWK Effective AWK Programming A User s Guide for GNU Awk 6 1 Introduzione a gawk 6 1 1 Cos gawk Gawk la versione GNU del programma UNIX comunemente disponibile awk un altro diffuso editor di flussi Dal momento che il programma awk spesso solo un link a gawk noi faremo riferimento ad esso come awk La funzione basilare di awk di cercare nei file linee od altre unit di testo contenenti uno o pi modelli Quando una linea corrisponde ad uno dei modelli vengono eseguite delle speciali azioni su quella linea I programmi in awk sono diversi da quelli della maggior parte degli altri linguaggi poich i programmi awk sono guidati dai dati data driven voi descrivete i dati su cui volete lavorare e quindi cosa fare quando li trovate Quando si lavora con linguaggi procedurali di solito pi difficile descrivere chiaramente i dati
182. o ci di cui stanno parlando e che mostrano alcune caratteristiche di Bash veramente carine e cos fuori dal suo contesto che non potrete usare mai in circostanze pratiche Potrete leggere questo genere di argomenti dopo aver terminato questo libro che contiene esercizi ed esempi che vi aiuteranno a sopravvivere nel mondo reale Dalla mia esperienza di utente UNIX Linux amministratrice di sistema e docente so che la gente pu avere anni di interazione quotidiana con i propri sistemi senza avere la minima conoscenza di automazione dei compiti Cos pensano frequentemente che UNIX non sia alla portata degli utenti e ancora peggio ricevono l impressione che sia lento e fuori moda Tale problema un altro a cui si potr porre rimedio con questa guida 2 Chi dovrebbe leggere questo libro Chiunque voglia semplificarsi la vita lavorando su un sistema UNIX o simil UNIX come gli utenti voluti e gli amministratori possono trarre beneficio dalla lettura di questo libro I lettori che hanno gi una certa padronanza nel lavorare nel sistema usando la linea di comando impareranno vantaggi e svantaggi della creazione di script di shell che semplifichino l esecuzione dei compiti quotidiani Gli amministratori di sistema fanno un grosso affidamento sullo scripting di shell lavori di uso comune vengono spesso automatizzati utilizzando semplici script Questo documento pieno di esempi che vi incoraggeranno a scriverne di propri e che vi ispirer
183. o e la verifica delle immissioni e dei file i costrutti if then else i costrutti if then elif else l utilizzo e la prova dei parametri posizionali le istruzioni if annidate le espressioni booleane l uso delle istruzioni case 7 1 Introduzione a if 7 1 1 In generale Alle volte vi serve specificare in uno script di shell diverse modalit d azione da intraprenderei n base al successo od al fallimento di un comando Il costrutto if vi permette di specificare tali condizioni La sintassi pi compatta del comando if if COMANDI TEST then COMANDI CONSEGUENTI fi Viene eseguito l elenco dei COMANDI TEST e se il suo stato di ritorno zero viene eseguito anche l elenco dei COMANDI CONSEGUENTI Lo stato di rientro return status lo stato di uscita dell ultimo comando eseguito o zero se nessuna delle condizioni testate vera COMANDI TEST implica spesso test di confronti numerici o stringa ma pu essere anche qualsiasi comando che restituisce uno stato zero quando ha successo e qualche altro stato quando fallisce Spesso si usano le espressioni unarie per esaminare lo stato di un file Se l argomento FILE di una sola delle primitive nella forma dev f d N allora viene verificato il descrittore di file N Anche stdin stdout e stderr e i loro rispettivi descrittori di file possono essere utilizzati per controlli Capitolo 7 Istruzioni condizionali 98 7 1 1 1 Espressioni usate con if
184. o eseguite solo al momento in cui vi autenticate nel sistema Nell esempio lo usiamo per configurare il valore di umask e per mostrare un elenco degli utenti connessi al momento della autenticazione login Tale utente ottiene anche il calendario del mese corrente Bash_login file commands to perform from the bash shell at login time sourced from bash_profile file protection umask 002 all to me read to group and others miscellaneous wW cell celate Ae aE Wei In mancanza di bash_profile verr letto questo file
185. o fornire informazioni in pi piuttosto che in meno sul genere di dati da inserire Ci si riferisce pure alla verifica degli argomenti e al relativo messaggio sull uso Bash possiede i comandi echo e printf per sottoporre dei commenti agli utenti e sebbene voi dovreste essere gi in confidenza almeno con l uso di echo gi adesso non tratteremo ancora alcuni Capitolo 8 Redigere script interattivi 114 esempi nelle prossime sezioni 8 1 2 Uso del comando integrato echo Il comando integrato echo emette i suoi argomenti separati da spazi e terminati con un carattere di nuovalinea Lo stato di ritorno sempre zero echo accetta una coppia di opzioni e e interpreta i caratteri di escape con la barra inversa e n sopprime i nuovalinea in mezzo al testo Come esempio di aggiunta di commenti miglioreremo un po i programmi cibo sh e pinguino sh della Sezione 7 2 1 2 michel test gt cat pinguino sh bin bash Lo script vi lascia presentare menu differenti a Tux Lui sar felice solo quando gli sar dato un pesce Per renderlo pi divertente abbiamo aggiunto in pi una coppia di animali ALE Smenu pesce then if Sanimale pinguino then echo e Hmmmmmm pesce Tux felice n elif Sanimale delfino then echo e a a aPweetpeettreetppeterdepweet a a a n else CCHOMS SMS aaa ATI fagli else if Sanimale pinguino then echo e A Tux non
186. o stato d uscita La variabile contiene lo stato d uscita del comando eseguito in precedenza il pi recentemente completato processo in primo piano foreground Capitolo 7 Istruzioni condizionali 101 L esempio seguente mostra una semplice verifica anny gt if eq 0 More input gt then echo Quello stato un be lavoro More input gt fi x Quello stato un be lavoro anny gt L esempio successivo dimostra che COMANDI TEST potrebbe essere un qualsiasi comando UNIX che restituisca uno stato d uscita e che if restituisce nuovamente uno stato d uscita pari a Zero anny gt if grep USER etc passwd More input gt then echo Il tuo account di utente non gestito localmente fi Il tuo account di utente non gestito localmente anny gt echo 0 anny gt Lo stesso risultato si pu ottenere come segue anny gt grep USER etc passwd anny gt if ne 0 then echo non un account locale fi non un account locale anny gt 7 1 2 2 Confronti numerici Gli esempi sottostanti usano i confronti numerici anny gt num wc 1 lavoro txt anny gt echo num 201 anny gt if num gt 150 Ancora immissione gt then echo echo per oggi hai lavorato sodo a sufficienza Ancora immissione gt echo fi per oggi hai lavorato sodo a sufficienza anny gt Questo script viene eseguito da cron ogni domenica Se il numero di settimana pari vi ricorda di
187. o testando il risultato di un comando o in base all immissione dell utente potete specificare un file da cui leggere l immissione che controlla il ciclo In tali casi spesso read il comando di controllo Fino a che ci sono linee di immissione nel ciclo l esecuzione dei comandi del ciclo continua Non appena tutte le linee di immissione sono state lette il ciclo esce Dal momento che il costrutto del ciclo considerato essere un unica struttura di comando come while COMANDO CONTROLLO do COMANDI CONSEGUENTI done la redirezione dovrebbe avvenire dopo l istruzione done in modo da corrispondere alla forma comando lt file Questo genere di redirezione funziona anche con altri tipi di cicli 9 4 2 Redirezione dell emissione Nell esempio sottostante l emissione del comando find viene utilizzata come immissione per il comando read che controlla un ciclo while carol octarine testdir cat archiveoldstuff sh bin bash Questo script crea una sottodirectory nella directory corrente verso cui vengono spostati i vecchi file Potrebbe essere qualcosa per cron se leggermente adattato da eseguirsi settimanalmente o mensilment H UMARCHIVIO date Y m d ESTDIR PWD archivio NUMARCHIVIO DZ mkdir SDESTDIR uso degli apici per intercettare i nomi di file che contengono spazi uso di read d per un utilizzo maggiormente aprova di errore find PWD type f a mtime 5 while read d 0
188. ome abbiamo gi spiegato in precedenza potrebbe essere rimpiazzato con una o pi nuovalinea ogni volta che appare 9 3 2 Esempio Uno script riordinaimmagini sh migliorato v Sezione 9 2 2 2 che verifichi la disponibilit di spazio su disco Se non disponibile abbastanza spazio su disco rimuovete le immagini dai mesi precedenti bin bash Questo script copia file dalla mia directory home in quella del webserver Una nuova directory viene creata ogni ora Se le immagini occupano troppo spazio le pi vecchie vengono rimosse while true do DIESCORRENO S4 Gale ME VE DiRa8 Mg pieve ico eve prato DE C O E viaizalii SDISCORTENO ge 90 1g co DATA date Y m d ORA date H mkdir SWEBDIR S DATA while SORA ne 00 do DESTDIR SWEBDIR SDATA SORA mkdir SDESTDIR mv SPICDIR jpg SDESTDIR sleep 3600 ORA date H aone DIESCORTEN Sk cafe AMS VE Bb EO repna eee done DARIMUOVERE find WEBDIR type d a mtime 30 for i in DARIMUOVERE do son MASALA done done Capitolo 9 Compiti ripetitivi 134 Osservate l inizializzazione delle variabili ORA e DISCOPIENO e l uso delle opzioni con ls e date per ottenere un elencazione corretta per DARIMUOVERE 9 4 La redirezione dell I O e i cicli 9 4 1 Redirezione dell immissione Invece di controllare un cicl
189. omi di file Se il modello coincide con l inizio del valore espanso di VAR quindi il risultato dell espansione il valore di VAR con il modello di comparazione pi breve o il modello di comparazione pi lungo indicato con Se VAR o l operazione di rimozione di modelli invece applicata ad ogni parametro posizionale e l espansione l elenco risultante Se VAR una variabile matriciale indicata con o l operazione di rimozione di modelli viene applicata invece ad ogni membro della matrice e l espansione il risultante elenco Ci mostrato negli esempi sottostanti bob in echo ARRAY one two one three one four bob in echo ARRAY one two three four bob in echo ARRAY t one wo one hr one four bob in echo ARRAY t one wo one hr one four bob in echo ARRAY t one one one four L effetto opposto si ottiene utilizzando e come nell esempio sottostante PAROLA dovrebbe corrispondere con una porzione all interno di una stringa bob in echo STRINGA questoeunnomemoltolungo bob in echo STRINGA lungo questoeunnomemolto 10 3 3 3 Rimpiazzare parti di nomi di variabili Questo si fa utilizzando la sintassi VAR MODELLO STRINGA Capitolo 10 Di pi sulle variabili 152 VAR MODELLO STRINGA La prima forma rimpiazza la prima corrispondenza la seconda rimpiazza tute le corrispondenze di MODELLO con STRINGA
190. onflitti con l espansione dei parametri la stringa non viene considerata come soggetta ad espansione delle graffe Una espansione delle graffe impostata correttamente deve contenere delle graffe aperte e chiuse senza virgolette ed almeno una virgola senza apici Qualsiasi espansione delle graffe formata in modo errato viene lasciata senza modifiche 3 4 3 Espansione della tilde Se una parola inizia con un carattere tilde non virgolettato tutti i caratteri fino alla prima barra senza apici o tutti i caratteri se non c una barra senza apici vengono considerati un prefisso della tilde tilde prefix Se nessuno dei caratteri nel prefisso della tilde sta tra degli apici i caratteri nel prefisso della tilde successivi alla tilde stessa vengono trattati come un possibile nome per l autenticazione login Se il nome di autenticazione una stringa vuota null string la tilde viene sostituita dal valore della variabile di shell HOME Se HOME non impostata essa sostituita con la directory personale dell utente che sta utilizzando la shell Altrimenti il prefisso tilde viene rimpiazzato dalla directory personale associata al nome di autenticazione specificato Se il prefisso tilde il valore della variabile di shell PWD sostituisce il prefisso tilde Se quest ultimo il valore della variabile di shell OLDPWD se impostato viene sostituito Se i caratteri che seguono la tilde nel prefisso t
191. ontiene voci chiamate 0 1 2 e cos via L apertura del file dev d N equivale a duplicare il descrittore dei file N Se il vostro sistema mette a disposizione dev stdin dev stdout vedrete che questi equivalgono rispettivamente a dev fd 0 dev fd 1 e dev 4d 2 L uso principale dei file dev fd per la shell Questo meccanismo permette ai programmi che utilizzano argomenti con nomi di percorso di gestire l immissione standard e l emissione standard nello stesso modo degli altri nomi di percorso Se dev fd non disponibile in un sistema dovrete trovare il modo di risolvere il problema Ci si pu fare per esempio usando un trattino per indicare che un programma dovrebbe leggere da un incanalamento pipe Un esempio michel gt filter corpo txt gz cat testata txt piepagina txt Questo testo viene stampato all inizio di ogni lavoro di stampa e ringrazia l amministratore di sistema per averci predisposto una infrastruttura di stampa cos grande Testo da filtrare Questo testo viene stampato alla fine di ciascun lavoro di stampa Il comando cat per prima cosa legge il file testata txt poi la sua immissione standard che l emissione del comando filter e per ultimo il file piepagina txt Lo speciale significato del trattino come argomento di linea di comando per fare riferimento all immissione standard o Capitolo 8 Redigere script interattivi 122 all emissione standard un idea sbagliata che si
192. opra pu essere abbreviato utilizzando gli operatori booleani AND amp amp e OR yK provabisestile sh mnt home testdir GVIM File Modifica Strumenti Sintassi Buffer Finestra Aiuto Dale E A aB bin bash Questo script verificher se siamo o meno in un anno bisestile anno date Y if anno 400 0 anno 4 0 amp amp anno 100 0 then echo Questo un anno bisestile Non scordare di aggiungere il giorno extra else echo Questo non un anno bisestile Ti INSERISCI Figura 7 2 Esempio dell uso degli operatori booleani Noi utilizziamo le parentesi doppie per provare un espressione aritmetica v Sezione 3 4 6 Ci equivale alla istruzione let Qui finirete nei guai utilizzando delle parentesi quadre se tenterete qualcosa come anno 400 perch in questo caso le parentesi quadre non rappresentano un vero comando di per se stesse Fra gli altri editor gvim uno di quelli che supportano gli schemi di colore a seconda del formato del file tali editor sono utili per scoprire errori nel vostro codice Capitolo 7 Istruzioni condizionali 108 7 2 5 Uso dell istruzione exit e if Abbiamo gi incontrato brevemente l istruzione exit nella Sezione 7 2 1 3 Esso termina l esecuzione dell intero script ed usato molto spesso se scorretta l immissione di dati da parte dell utente se un istruzione non funziona con successo
193. orano questi segnali anche i comandi che sono stati avviati come risultato di una sostituzione di comandi quando generati da tastiera SIGHUP normalmente termina una shell Una shell interattiva invier un SIGHUP a tutti i lavori in esecuzione o fermati guardate la documentazione sull integrato disown se volete disabilitare questo comportamento base per un processo particolare Usate l opzione huponexit per uccidere killing tutti i lavori alla ricezione di un segnale SIGHUP utilizzando l integrato shopt Capitolo 12 Cattura dei segnali 162 12 1 1 3 Invio di segnali usando la shell Usando la shell Bash si possono inviare i segnali seguenti Tabella 12 1 Segnali di controllo in Bash Combinazione Significato standard dei tasti 8 Ctrl C Il segnale di interruzione invia SIGINT al lavoro che sta girando in primo piano Il carattere di sospensione ritardata Determina l interruzione di un processo in corso quando tenta di leggere immissioni dal terminale Il controllo viene Ctrl Y restituito alla shell e l utente pu mettere in primo piano mettere dietro le quinte o uccidere un processo La sospensione ritardata disponibile solo in sistemi operativi che supportino tale funzionalit Il segnale di sospensione invia un SIGSTP ad un programma attivo in modo Ctrl Z Can da fermarlo e restituire il controllo alla shell Impostazione del terminale Controllate le vostre impostazioni stty La sospens
194. orazione se l immissione non rientra nell intervallo viene stampato un messaggio Se si preme q il ciclo si interrompe bin bash Calcola la media di una serie di numeri PUNTEGGIO 0 EDIA 0 SOMMA 0 NUM 0 while true do echo n Inserisci il tuo punteggio 0 1005 q per finire read PUNTEGGIO ECG US PUNIRE GGI UA LOS PUN MECC TOM OO n SCO YS Seri CO TA GIONE ON MIRA OVO eliz VSRUNTICGIOY Vat Ip tnem echo Classifica media S SMEDIAS break else SOMMA S SOMMA SPUNTEGGIO NUM SNUM 1 MEDIA SOMMA SNUM a done echot Yus eita u Osservate come le variabili nelle ultime linee sono lasciate senza apici per poter effettuare i calcoli aritmetici Capitolo 9 Compiti ripetitivi 133 9 3 Il ciclo until 9 3 1 Cos Il ciclo until molto simile al quello while ad eccezione che il ciclo viene eseguito fintanto until che COMANDO TEST viene eseguito con successo Fino a quando questo comando fallisce il ciclo continua La sintassi la stessa del ciclo while until COMANDO TEST do COMANDI CONSEGUENTI done Lo stato di ritorno lo stato d uscita dell ultimo comando eseguito della lista COMANDI CONSEGUENTI oppure zero se nessuno stato eseguito COMANDO TEST pu di nuovo essere qualsiasi comando che pu uscire con uno stato di successo o fallimento e COMANDI CONSEGUENTI pu essere qualsiasi comando UNIX script o costrutto di shell C
195. ore di minore o uguale a maggiore di ovvero maggiore o uguale a ARG ARG1 e ARG2 sono degli interi Le espressioni si possono combinare utilizzando i seguenti operatori elencati in ordine decrescente di precedenza Tabella 7 2 Combinazioni di espressioni Operazione Effetto IEXPR Vero se EXPR falso Restituisce il valore di EXPR Ci pu essere EXPR usato per scavalcare la normale precedenza degli operatori EXPR1 a EXPR2 Vero se EXPR1 ed EXPR2 sono entrambi veri EXPR1 o EXPR2 Vero se o EXPR1 o EXPR2 vero L integrata o test valuta le espressioni condizionali usando un insieme di regole basate sul numero di argomenti Maggiori informazioni su questa materia si possono trovare nella documentazione di Bash Proprio come if viene chiuso con fi la parentesi quadra aperta deve essere chiusa dopo l elencazione delle condizioni 7 1 1 2 Comandi successivi all istruzione then L elenco COMANDI CONSEGUENTI che segue l istruzione then pu essere qualsiasi valido comando UNIX programma eseguibile script di shell eseguibile o istruzione di shell ad eccezione del fi di chiusura E importante ricordare che then e fi sono considerati come istruzioni separate nella shell D altra parte quando vengono inseriti nella linea di comando essi sono separati da un punto e virgola In uno script le diverse parti dell istruzione if normalmente sono ben distinte Di seguito un paio di
196. peciale di un singolo carattere Una barra inversa backslash senza apici viene impiegata in Bash come carattere di escape Essa impedisce il valore letterale del carattere immediatamente successivo ad eccezione della nuovalinea newline Se un carattere di nuova linea appare subito dopo la barra inversa ci segna la continuazione della linea quando pi lunga della larghezza del terminale la barra inversa viene rimossa dal flusso in ingresso ed ignorata a tutti gli effetti franky gt data 20021226 franky gt echo data 20021226 franky gt echo data data Nell esempio viene creata la variabile data ed impostata per contenere un valore Il primo echo mostra il valore della variabile ma con il secondo il segno del dollaro viene reso con escape 3 3 3 Apici singoli Gli apici singoli vengono utilizzati per conservare il valore letterale di ogni carattere racchiuso tra di loro Un apice singolo non pu trovarsi tra apici singoli anche se preceduto da una barra inversa Continuiamo con l esempio precedente franky gt echo data data 3 3 4 Apici doppi Usando gli apici doppi si conserva il valore letterale di tutti i caratteri ad eccezione del segno del dollaro gli apici inversi virgolette inverse o backticks apici singoli inversi e la barra inversa Il segno del dollaro e gli apici inversi mantengono il loro speciale significato con gli apici virgolette doppi La barra inve
197. piace quello Tux vuole pesce n exit 1 elif Sanimale delfino then echo e a a a a a aPweepwishpeeterdepweet a a a exit 2 else echo e Sai leggere il segnale Non dare da mangiare al Sanimale n exit 3 EL fai michel test gt cat cibo sh bin bash Lo script agisce in base allo stato di uscita dato da pinguino sh ig a j 120 j then echo e Uso dello script cibo t 0 cibonelmenu animale nome n exit 1 else export menu 1 export animale 2 echo e Nutriamo con menu il Sanimale n cibo nethome anny testdir pinguino sh cibo menu animale risultato echo e Pasto eseguito n Capitolo 8 Redigere script interattivi 115 cesso Veriswoltaro dun 1 echo e Guardia Sarebbe meglio dare loro un pesce altrimenti diventano volenti rer echo e Guardia Nessuna meraviglia se abbandonano il nostro pianeta n echo e UEuarcias W Compra il cibo che fornisce lo Zoo all entrata Mu sN all echo e Guardia Vuoi avvelenarli sul serio n echo e Guardia Non scordare la guida n esac ie al echo Uscendo echo e a a aGrazie per la visita allo Zoo speriamo di vedervi presto di nuovo n michel test gt cibo sh mela cammello Nutrire con una mela un cammello Sai leggere il segnale Non dare da mangiare al cammello Pasto eseguito Guisusehlas VC ampia sl calo che siormmiizieo le Zoo ailll emersasta Mo aui Guardia Vuoi avvelenarli su
198. pra della linea corrente p Stampa print il testo r Legge read un file S Ricerca search e sostituisce un testo w Scrive write in un file A parte la modifica dei comandi potete assegnare delle opzioni a sed Nella tabella successiva c una panoramica Tabella 5 2 Opzioni di sed Opzione Effetto Ze SCRIPT Aggiunge il comandi in SCRIPT all insieme dei comandi da far funzionare E mentre si stanno elaborando i dati in ingresso Aggiunge i comandi contenuti nel file SCRIPT FILE all insieme dei comandi da far funzionare mentre si stanno elaborando i dati in entrata n Modo silenzioso y Stampa le informazioni sulla versione ed esce Le pagine info di sed contengono maggiori informazioni qui elenchiamo solo i comandi e le opzioni utilizzati pi frequentemente 5 2 Modifica interattiva 5 2 1 Stampa delle linee contenenti un modello Questo qualcosa che potreste fare con grep ma non potreste eseguire un trova e sostituisci utilizzando tale comando Ci solo per iniziare Questo il nostro file testuale d esempio sandy gt cat n esempio 1 Questa la prima linea di un testo di esempio 2 E un testo con erori 3 Molti erori 4 5 6 Cos tanti erori Tutti questi erori mi fanno impazzire Questa una linea che non contiene errori Questa l ultima linea Vogliamo sed per trovare le linee che contengono il nostro modello di ricerca in questo c
199. pressioni regolari Una espressione regolare uno schema che descrive un insieme di stringhe Le espressioni regolari sono costruite in modo analogo alle espressioni matematiche utilizzando vari operatori per mettere insieme delle espressioni pi piccole Il blocchi fondamentali per realizzarle sono delle espressioni regolari che coincidono con un singolo carattere La maggior parte dei caratteri comprese tutte le lettere e le cifre sono espressioni regolari di per se stessi Qualsiasi metacarattere con significato speciale pu essere quotato quoted facendolo precedere da una barra inversa 4 1 2 metacaratteri delle espressioni regolari Una espressione regolare pu essere seguita da uno degli svariati operatori di ripetizione metacaratteri Tabella 4 1 Operatori delle espressioni regolari Operatore Effetto Corrisponde ad ogni carattere L oggetto che precede opzionale e sar fatto corrispondere almeno una volta a L oggetto che precede sar fatto corrispondere da zero a pi volte L oggetto che precede sar fatto corrispondere da una a pi volte N L oggetto che precede sar fatto corrispondere esattamente N volte N L oggetto che precede sar fatto corrispondere da N a pi volte N M L oggetto che precede sar fatto corrispondere almeno N volte ma non pi di M volte Rappresenta l intervallo se non il primo o l ultimo di un elenco o il punto finale di un
200. pretano le stringhe a destra come modelli di glob di shell per confrontarli rispetto al valore a sinistra per esempio valore val Come l elenco COMANDI CONSEGUENTI che segue l istruzione then l elenco COMANDI CONSEGUENTI ALTERNATIVI che segue l istruzione else pu contenere qualsiasi comando che restituisca uno stato d uscita Un altro esempio che amplia quello della Sezione 7 1 2 1 anny gt su Password root elegance root if grep USER etc passwd 1 gt dev null gt then echo Il tuo account di utente non gestito localmente gt else echo il tuo account gestito dal file locale etc passwd gt Bol il tuo account gestito dal file locale etc passwd root elegance root Passiamo all account root per mostrare l effetto dell istruzione else il vostro root di solito un account locale mentre l account di utente potrebbe essere gestito da un sistema centrale come un server LDAP 7 2 1 2 Controllo degli argomenti a linea di comando Invece di impostare una variabile e poi eseguire uno script spesso pi elegante mettere i valori delle variabili nella linea di comando Per il nostro scopo utilizziamo i parametri posizionali 1 2 N fa riferimento al numero degli argomenti a linea di comando 0 si riferisce al nome dello script Quello seguente un semplice esempio Capitolo 7 Istruzioni condizionali 104 anny octarine testdir File Edit View Terminal Go He
201. pzione viene abilitata o usando il set integrato set o posix oppure chiamando il programma bash con l opzione posix Bash tenter quindi di attenersi il pi possibile allo standard POSIX per le shell Si ottiene la stessa cosa impostando la variabile Capitolo 1 Bash e gli script di Bash 16 POSIXLY_ CORRECT File letti e definito da BASH_ENV 1 2 2 2 6 Chiamata da remoto File letti quando chiamata da rshd e bashrc LJ Evitate l uso di r tools State attenti ai pericoli quando utilizzate strumenti come rlogin telnet rsh e rcp sono intrinsecamente insicuri poich i dati confidenziali vengono inviati in chiaro sulla rete Se vi servono strumenti per esecuzioni trasferimento file e cos via in remoto utilizzate un implementazione di Secure Shell nota comunemente come SSH disponibile liberamente su http www openssh org Sono disponibili anche diversi programmi cliente per sistemi non UNIX consultate il vostro mirror locale di software 1 2 2 2 7 Chiamata quando UID non uguale a EUID Un questo caso non viene letto alcun file d avvio 1 2 2 3 Shell interattive 1 2 2 3 1 Cosa una shell interattiva Una shell interattiva generalmente legge da e scrive su ub terminale utente ingresso ed uscita dei dati sono collegati ad un terminale Il comportamento interattivo di Bash inizia quando il comando bash viene chiamato senza argomenti privi di opzioni eccetto quando l opzione una strin
202. que pu modificare ma non cancellare i file di Michel Potete risolvere questo problema utilizzando delle speciali modalit di accesso al file dello script v SUID e SGID nella guida Introduzione a Linux Capitolo 8 Redigere script interattivi 119 8 2 3 Redirezione e descrittori dei file 8 2 3 1 In generale Come sapete dall utilizzo elementare della shell l immissione e l emissione di un comando pu essere rediretta prima che sia eseguito impiegando una notazione speciale gli operatori di redirezione interpretata dalla shell La redirezione pu essere usata anche per aprire e chiudere file del ambiente di esecuzione della shell corrente La redirezione pu pure capitare in uno script in modo che quest ultimo pu ricevere immissioni da parte di un file per esempio oppure indirizzare le emissioni verso un file In seguito l utente pu rivedere il file di emissione o pu usarlo come immissione per un altro script Le immissioni input ed emissioni output di file si ottengono grazie a dei gestori di interi che tracciano tutti i file aperti di un dato processo Questi valori numerici sono conosciuti come descrittori di file file descriptors I descrittori di file meglio conosciuti sono stdin stdout e stderr rispettivamente con i numeri di descrittori di file 0 1 e 2 L emissione qui sotto mostra come i descrittori di file riservati puntino alle reali periferiche michel gt ls 1l dev std lrwxrwxrwx 1
203. r gt set o noglob willy testdir gt touch willy testdir gt ls 1 dimise dI yy ilibiy 0 iso 27 Sga 3 7 Sommario L ambiente Bash pu essere configurato globalmente ed in base al singolo utente Si usano vari file di configurazione per definire in modo particolareggiato il comportamento della shell Questi file contengono opzioni di shell impostazioni per variabili definizioni di funzioni e diversi altri blocchi di costruzione per crearci un ambiente confortevole Ad eccezione dei parametri riservati della shell Bourne di Bash e quelli speciali i nomi delle variabili possono essere scelti pi o meno liberamente Siccome parecchi caratteri hanno doppi o tripli significati in base all ambiente Bash utilizza un sistema di virgolettature per eliminare i significati speciali da uno o pi caratteri quando non si desidera un trattamento speciale Bash impiega vari metodi di espansione dei dati inseriti nella riga di comando per decidere quali comandi eseguire Capitolo 3 L ambiente di Bash 71 3 8 Esercizi Per questo esercizio dovrete leggere le pagine man di useradd perch stiamo per usare la directory etc skel per conservare i file predefiniti della configurazione della shell che vengono copiati nella directory personale di ogni utente appena aggiunto Per prima cosa eseguiremo alcuni esercizi generali sulla definizione e la presentazione delle variabili 1 Sii ELOS Create 3 variabili VAR
204. ra ciascun campo in uscita Configurazione locale Notate che la configurazione dei dati in uscita del comando ls l potrebbe essere differente nel vostro sistema La presentazione di ora e data dipende dalle vostre impostazioni d ambiente 6 2 2 Formattare i campi Senza formattare utilizzando solo il separatore dei dati in uscita quest ultimi apparirebbero Capitolo 6 Il linguaggio di programmazione GNU awk 89 piuttosto scarni Inserendo una coppia di tabulazioni e una stringa per indicare che tipo di dati sono questi li render di aspetto molto pi gradevole kelly octarine test gt ls ldh grep v total awk print La dimensione is 5 byte per 9 La dimensione 160 byte per orig La dimensione 121 byte per script sed La dimensione 120 byte per temp_fil La dimensione 126 byte per test La dimensione 120 byte per twolines La dimensione 441 byte per txt2html sh DD Me MD De De kelly octarine test gt Osservate l uso della barra inversa che fa continuare i lunghi dati in ingresso nella riga successiva senza che la shell interpreti ci come un comando separato Mentre i vostri dati in ingresso nella linea di comando possono essere di lunghezza virtualmente illimitata il vostro monitor non lo e certamente non lo neanche la carta stampata L utilizzo della barra inversa consente anche la copia e l incollaggio delle linee soprastanti in una finestra di terminale L opzione
205. rchivio e compilato se queste azioni sono compatibili Soltanto la reale installazione del pacchetto non dovrebbe essere interrompibile Capitolo 12 Cattura dei segnali 166 Capitolo 12 Cattura dei segnali 167 Appendice A Caratteristiche della shell Questo documento offre una panoramica delle comuni funzioni di shell le stesse in qualsiasi gusto di shell e di quelle differenti tra le shell funzioni caratteristiche delle shell A 1 Caratteristiche comuni Le seguenti caratteristiche sono standard in ogni shell Notate che i comandi stop suspend jobs bg e fg sono disponibili solo su sistemi che supportano il controllo dei lavori job Tabella A 1 Caratteristiche comuni delle shell Comando Significato gt Redirige l emissione gt gt Aggiunge al file lt Redirige l immissione lt lt Documento here redirige l immissione Emissione dell incanalamento amp Avvia il processo dietro le quinte Separa i comandi sulla stessa linea X Fa coincidere qualsiasi carattere nel nome del file Fa coincidere un singolo carattere nel nome del file Confronta ogni carattere compreso tra le parentesi 0 Esegue in una sottoshell D Sostituisce l emissione del comando ricompreso tig Virgolettatura parziale consente l espansione delle variabili e dei comandi i Virgolettatura completa nessuna espansione Virgolettatura del carattere s
206. ribuzione del software E generalmente noto che queste condizioni stimolano la creativit Questo era anche il caso del programma bash che ha molteplici funzionalit extra che altre shell non sono in grado di offrire Capitolo 1 Bash e gli script di Bash 14 1 2 2 Funzionalit riscontrabili solo in bash 1 2 2 1 Invocazione In aggiunta alle opzioni di shell a singolo carattere nella riga di comando che possono essere generalmente configurate utilizzando il comando interno alla shell set esistono diverse opzioni multicarattere che potete usare Ci interesseremo in questo e nei successivi capitoli di una coppia delle opzioni pi popolari l elenco completo si pu trovare nelle pagine info di Bash Bash features gt Invoking Bash 1 2 2 2 I file di avvio di Bash I file di avvio startup files sono degli script che vengono letti ed eseguiti da Bash quando questo parte Le seguenti sottosezioni descrivono dei modi differenti per avviare la shell e i relativi file di avvio che vengono letti 1 2 2 2 1 Chiamata come shell di login interattiva o con login Interattivo significa che potete inviare dei comandi La shell non sta funzionando perch uno script stato attivato Una shell di login significa che avete una shell dopo l autenticazione nel sistema normalmente dando il vostro nome utente e la password File letti e etc profile bash_profile bash_login oppure profile viene letto il primo
207. ript Come sempre quando altri usano i vostri script meglio dare troppe informazioni piuttosto che insufficienti i documenti here sono un tipo di costrutto di shell che consente la creazione di elenchi mantenendo le scelte degli utenti Tale costrutto si pu usare anche per eseguire senza interventi compiti di sottofondo altrimenti interattivi 8 4 Esercizi Questi esercizi sono applicazioni pratiche di costrutti trattati in questo capitolo Quando si scrivono degli script potreste provarli utilizzando una directory test che non contenga troppi dati Scrivete ciascun passo indi provate quella porzione di codice piuttosto di scrivere tutto in una sola volta 1 Scrivete un script che chieda l et dell utente Se uguale o maggiore di 16 stampate un messaggio che dice che questo utente ha il permesso di bere alcolici Se l et dell utente inferiore a 16 stampate un messaggio che dica all utente quanti anni deve attendere prima che gli sia consentito legalmente di bere Come extra calcolate quanta birra un utente maggiore di 18 anni ha bevuto statisticamente 100 litri anno e stampate questa informazione per l utente 2 Realizzate uno script che prenda un file come argomento Utilizzate un documento here che presenti all utente una coppia di scelte per la compressione del file Le scelte potrebbero essere gzip bzip2 compress e zip 3 Realizzate uno script denominato salvataggiohome che automatizzi tar in modo che la pe
208. rsa conserva il suo significato solo quando seguita dal dollaro dagli apici inversi dagli apici doppi da barra inversa o da nuovalinea Con le virgolette doppie le barre inverse vengono tolte dal flusso in ingresso quando sono seguite da uno di questi caratteri Le barre inverse che precedono caratteri che non hanno significati speciali vengono lasciate senza modifiche per l elaborazione dell interprete della shell Una virgoletta doppia pu essere tra virgolette doppie facendola precedere da una barra inversa franky gt echo data 20021226 franky gt echo data Stum Aom A0 LP 22 r06 CTS ZOOS Capitolo 3 L ambiente di Bash 60 franky gt echo I d say Go for it TUE says Go cor dl franky gt echo More input gt franky gt echo 3 3 5 Virgolettatura ANSI C Parole nella forma STRING vengono trattate in modo speciale La parola si espande in una stringa con i caratteri di escape tramite barra inversa sostituiti come specificato dallo standard ANSI C Le sequenze di escape tramite barra inversa si possono trovare nella documentazione di Bash 3 3 6 Locali Una stringa tra virgolette doppie preceduta da un segno di dollaro far si che la stringa venga tradotta secondo la localizzazione locale corrente Se la localizzazione corrente C o POSIX il segno dollaro viene ignorato Se la stringa viene tradotta e rimpiazzata la sostituzione tra apici
209. rsona che esegua lo script usi sempre le desiderate opzioni cvp e directory di destinazione del salvataggio var backups per fare una copia d emergenza della propria directory personale home Implementate le seguenti funzionalit Controllate il numero di argomenti Lo script dovrebbe funzionare senza argomenti Se presente un qualche argomento uscite dopo aver stampato un messaggio di istruzioni Determinate se la directory backups ha abbastanza spazio libero per tenere la copia d emergenza Capitolo 8 Redigere script interattivi 127 Chiedete all utente se desidera una copia di salvataggio completa o incrementale Se l utente non ha ancora una copia completa di salvataggio stampate un messaggio che sar realizzata una copia completa d emergenza In caso di copia di salvataggio incrementale fate solo questa se quella completa non pi vecchia di una settimana Comprimete la copia di salvataggio utilizzando un qualsiasi strumento di compressione Informate l utente che lo script sta facendo questo perch potrebbe richiedere un po di tempo durante il quale l utente potrebbe cominciare a preoccuparsi se non appare nessuna emissione sullo schermo Stampate un messaggio che informi l utente circa la dimensione della copia di salvataggio compressa Guardate info tar o Introduzione a Linux capitolo 9 Preparazione dei vostri dati per informazioni di sottofondo 4 Realizzate uno script denominato semplice useradd sh
210. rsonale createli se necessario 3 1 2 1 bash_profile Questo il file di configurazione preferito per configurare i singoli ambienti degli utenti In questo file gli utenti possono aggiungere delle configurazioni extra oppure cambiare i valori predefiniti franky gt cat bash profile H4 4 44 EE E EH EH 4 4 4 4 4 4 4 EEEE EEEE HEHEH bash_profile file Executed from the bash shell when you log in FEFE HE TE FE HE HE FE FE HE FE FE HE TE FE HE FE FE FE HE FE FE E TE FE HE FE FE FE HE FE FE E TE FE HE TE FE FE HE FE FE E TE FE HE E FE FE E TE E E E E E E E E EE E EEH source bashrc source bash_login case USOoSs sm IRIX stty sane dec SUty erase ri SUNOS SCT erage 5 Siavaisoans Capitolo 3 L ambiente di Bash 44 LARE di esac Questo utente configura il carattere backspace per l autenticazione in differenti sistemi operativi A parte ci vengono letti bashrc e bash_login dell utente 3 1 2 2 bash_login Questo file contiene delle specifiche impostazioni che normalmente vengon
211. s classi di equivalenze e sequenze di racccolta collating sequences con espansione dei nomi di file e corrispondenza di schemi pattern matching LC_CTYPE Questa variabile determina l interpretazione dei caratteri e il comportamento delle classi di caratteri con l espansione dei nomi dei file e la corrispondenza di schemi pattern matching LC_MESSAGES Questa variabile determina la localizzazione utilizzata per tradurre stringhe tra doppie virgolette precedute da un segno LC_NUMERIC Questa variabile determina la categoria della localizzazione utilizzata per il formato dei numeri Il numero di linea nello script o nella funzione di shell attualmente in LINENO i esecuzione LINES Utilizzato dall integrato select per stabilire la lunghezza della colonna per gli elenchi di selezione di stampa Una stringa che descrive nella sua interezza il tipo di sistema in cui MACHTYPE viene eseguito Bash nel formato standard GNU CPU COMPANY SYSTEM Quanto spesso in secondi la shell dovrebbe controllare la posta nei file MAILCHECK pai sl an Si a specificati nelle variabili MAILPATH o MAIL OLDPWD La precedente directory di lavoro impostata dall integrato cd OPTERR Se impostata con il valore 1 Bash mostra i messaggi di errore generati dall integrato getopts OSTYPE Una stringa che descrive il sistema operativo in cui sta girando Bash Una variabile matriciale cont
212. se nei sistemi Linux Se state lavorando su sistemi proprietari verificate con l opzione V che versione state utilizzando GNU grep pu essere scaricato da http gnu org directory Capitolo 4 Le espressioni regolari 75 4 2 2 1 Ancore delle linee e delle parole Dall esempio precedente ora vogliamo esclusivamente mostrare le linee che iniziano con la stringa n root cathy gt grep root etc passwd TOOTE x30403 roor RO 00 NA Se desideriamo vedere quali account non hanno per nulla una shell assegnata cerchiamo linee che terminano con cathy gt grep etc passwd news x 9 13 news var spool news Per controllare che PATH venga esportato in bashrc selezionate prima le linee export e poi cercate quelle che iniziano con la stringa PATH in modo da non mostrare MANPATH e d altri possibili percorsi cathy gt grep export bashrc grep lt PATH export PATH bin usr lib mh lib usr bin usr local bin usr ucb usr dbin PATH In maniera simile gt corrisponde alla fine di una parola Se volete trovare una stringa che sia una parola separata racchiusa tra spazi meglio utilizzare la w come in questo esempio in cui mostriamo delle informazioni sulla partizione di root cathy gt grep w etc fstab LABEL ext3 defaults IL dl Se non si usa l opzione saranno mostrate tutte le linee dalla tabella del file system 4 2 2 2 Classi di caratteri Una espressione tra
213. seglob e non ci sono corrispondenze la parola viene rimossa Se impostata l opzione di shell nocaseglob la corrispondenza viene eseguita senza alcuna considerazione per le maiuscole o minuscole dei caratteri alfabetici mm Quando uno schema viene utilizzato per la generazione di un nome di file il carattere all inizio del nome del file o che segue immediatamente una barra inversa deve essere fatto coincidere esplicitamente a meno che non sia impostata l opzione di shell dotglob Quando un nome di file coincide il carattere della barra deve essere sempre fatto corrispondere esplicitamente In altri casi il carattere non trattato in modo speciale La variabile di shell GLOBIGNORE pu essere utilizzata per restringere l insieme dei nomi di file che corrispondono allo schema Se GLOBIGNORE definito ciascun nome di file coincidente che corrisponde anche ad uno degli schemi in GLOBIGNORE rimosso dalla lista delle coincidenze I file dei nomi e vengono ignorati sempre anche quando GLOBIGNORE definito Tuttavia l impostazione di GLOBIGNORE ha l effetto di abilitare l opzione di shell dotglob cosicch tutti gli altri nomi di file inizianti per coincideranno Per ottenere il vecchio comportamento di ignorare i nomi di file inizianti con create uno degli schemi in GLOBIGNORE con L opzione dotglob disabilitata quando GLOBIGNORE non definita Capitolo 3 L ambiente di Bash 67
214. segnali 165 vostro script declare t VARIABILE valore trap echo VARIABILE in uso qui DEBUG resto dello script 12 2 3 2 Rimozione della spazzatura all uscita Il comando whatis si appoggia ad una base dati che viene regolarmente costruita utilizzando lo script makewhatis cron con cron bin bash OCKFILE var lock makewhatis lock Previous makewhatis should execute successfully E SLOCKFILE amp amp exit 0 Upon exit remove lockfile piego VI ion SLOCATIHa p axit 299p PY EXIT touch LOCKFILE makewhatis u w exit 0 12 3 Sommario Si possono inviare dei segnali ai vostri programmi usando il comando kill o delle scorciatoie da tastiera Questi segnali possono essere intercettati a seconda dell azione che pu essere eseguita utilizzando l istruzione trap Alcuni programmi ignorano i segnali L unico segnale che nessun programma pu ignorare il segnale KILL 12 4 Esercizi Una coppia di esempi pratici 1 Realizzate uno script che scriva una immagine di avvio boot image in un dischetto utilizzando il programma di utilit dd Se l utente prova ad interrompere lo script usando Ctrl C mostrate un messaggio che dica che tale azione render inutilizzabile il dischetto 2 Redigete uno script che automatizzi l installazione di un pacchetto di terze parti di vostra scelta Il pacchetto deve essere scaricato da Internet decompresso estratto dall a
215. semplici esempi Capitolo 7 Istruzioni condizionali 100 7 1 1 3 Controllo dei file Il primo esempio verifica l esistenza di un file anny gt cat msgcheck sh bin bash echo echo ai TL echo echo anny Questo script verifica l esistenza del file messages terier Re f var log messages then echo var log messages esiste MEA ONS gt msgcheck sh Questo script verifica l esistenza del file messages Wario var log messages esist ERa REOR 7 1 1 4 Controllo delle opzioni di shell Da aggiungere tra i vostri file di configurazione di Bash Queste lin stamper un messaggio se non stata impostata l opzione noclobber if o noclobber then echo I tuoi file sono protetti da sovrascritture accidentali usando la redirezione Iak L ambiente L esempio soprastante funzioner quando inserito nella linea di comando anny gt if o noclobber then echo echo I tuoi file sono protetti da sovrascritture echo fi I tuoi file sono protetti da sovrascritture anny gt Tuttavia se utilizzate controlli delle condizioni che dipendono dall ambiente potreste ottenere dei risultati differenti dando lo stesso comando in uno script poich quest ultimo aprir una nuova shell in cui le variabili e le opzioni attese potrebbero non essere state definite automaticamente 7 1 2 Semplici applicazioni di if 7 1 2 1 Verifica dell
216. si usa la forma gt ELENCO la scrittura nel file fornir dati in ingresso per ELENCO Se si usa la forma lt ELENCO il file passato come argomento dovrebbe essere letto per ottenere i dati in uscita di ELENCO Notate che non dovrebbero esserci spazi tra i segni lt e gt e le parentesi a sinistra altrimenti il costrutto sarebbe interpretato come una ridirezione Quando disponibile la sostituzione dei processi viene eseguita contemporaneamente all espansione dei parametri e delle variabili alla sostituzione dei comandi ed all espansione aritmetica Maggiori informazioni nella Sezione 8 2 3 3 4 8 Scomposizione delle parole La shell analizza nella scomposizione delle parole i risultati dell espansione dei parametri della sostituzione dei comandi e dell espansione aritmetica che non si trovano all interno di apici doppi La shell tratta ciascun carattere di IFS come un delimitatore e scompone i risultati delle altre Capitolo 3 L ambiente di Bash 66 espansioni in parole su questi caratteri Se IFS non definito o il suo valore esattamente lt spazio gt lt tab gt lt nuovalinea gt quello predefinito allora qualsiasi sequenza di caratteri IFS serve per delimitare le parole Se IF S ha un valore diverso da quello base allora le sequenze dei caratteri degli spazi bianchi spazio e Tab vengono ignorate all inizio e alla fine della parola per tutto il carattere di spazio bianco presente nel valore di IF S un c
217. ssere destinato ad un altro incanalamento anonimo e La redirezione del comando corrente viene elaborata da sinistra a destra e La redirezione N gt amp M o N lt amp M dopo un comando ha l effetto di creare o aggiornare il collegamento simbolico proc self d N con la stessa destinazione del collegamento simbolico proc self fd M Capitolo 8 Redigere script interattivi 120 e La chiusura N gt amp del descrittore di file ha l effetto di cancellare il collegamento simbolico proc self fd N Solo ora viene eseguito il comando corrente Quando avviate uno script dalla linea di comando non cambia pi nulla perch il processo shell figlio user gli stessi descrittori di file di quello genitore Quando non disponibile un tale genitore per esempio quando avviate uno script utilizzando il programma di utilit cron i descrittori di file standard sono incanalamenti o altri file temporanei a meno che non venga utilizzata una qualche forma di redirezione Questo viene rappresentato nell esempio sottostante che mostra un emissione da un un semplice script at michel gt date nici Jem 24 1105350 Cam 2003 michel gt at 1107 warning commands will be executed using in order a SSHELL b login shell c bin sh at gt ls 1 proc self fd gt var tmp fdtest at at gt lt EOT gt Jo 10 at 2003 01 24 11 07 michel gt cat var tmp fdtest at total 0 ILie rg 1 michel michel 64 Jan 24 11 07
218. ssivi Le linee vuote sono considerate anch esse delle linee perci non iniziate il vostro script con una linea vuota Per lo scopo di questo corso tutti gli script inizieranno con la linea bin bash Come notato prima questo implica che l eseguibile di Bash si trovi in bin 2 2 2 Aggiungere commenti Dovreste stare attenti al fatto che potreste non essere l unica persona a leggere il vostro codice Capitolo 2 Scrivere e correggere gli script 36 Molti utenti ed amministratori di sistema fanno girare script che sono stati scritti da altre persone Se essi vogliono vedere come l avete realizzato i commenti sono utili per illuminare il lettore I commenti rendono pure pi semplice la vostra vita Dite che avete dovuto leggere un mucchio di pagine man per raggiungere un particolare risultato con qualche comando utilizzato nel vostro script Potreste non ricordare pi come funzionava se avete necessit di modificare il vostro script dopo poche settimane o mesi a meno che non abbiate commentato cosa come e o perch lo avete fatto Prendete l esempio scriptl sh e copiatelo come scriptl commentato sh che modifichiamo in modo che i commenti rispecchino ci che fa lo script Tutto ci che la shell incontra in una linea dopo un segno di cancelletto viene ignorato ed visibile solo con l apertura del file dello script di shell bin bash Questo script pulisce il terminal2 mostra un saluto e fornisce informazioni sugli ute
219. stituisci con sed Nel file d esempio ora cercheremo e sostituiremo gli errori invece di de selezionare le linee contenenti la stringa di ricerca sandy gt sed s erori errori esempio Questa la prima linea di un testo di esempio E un testo con errori olti errori Cos tanti errori Tutti questi erori mi fanno impazzire Questa una linea che non contiene errori Questa l ultima linea sandy gt Come potete vedere questo non esattamente l effetto desiderato nella linea 4 solo la prima ricorrenza della stringa di ricerca stata sostituita e l permane ancora un erore Utilizzate il comando g per indicare a sed che dovrebbe esaminare la linea intera invece di fermarsi alla prima ricorrenza della vostra stringa sandy gt sed s erori errori g esempio Questa la prima linea di un testo di esempio E un testo con errori olti errori Cos tanti errori Tutti questi errori mi fanno impazzire Questa una linea che non contiene errori Questa l ultima linea sandy lt gt Per inserire una stringa all inizio di ogni linea ad esempio per mettere gli apici Capitolo 5 L editor di flussi GNU sed 83 sandy gt sed s gt esempio gt Questa la prima linea di un testo di esempio gt E un testo con erori gt Modes emo gt Cos tanti erori Tutti questi erori mi fanno impazzire gt Questa una linea che non contiene errori gt Questa l ultima li
220. ta nella Sezione 7 2 5 1 6 Sommario Bash la shell GNU compatibile con la shell Bourne e incorporante molte funzioni utili di altre shell Quando viene avviata la shell legge i suoi file di configurazione I pi importanti sono etc profile bash_profile bashrc Bash si comporta in modo diverso quando in modalit interattiva ed ha pure una modalit conforme e ristretta a POSIX I comandi di shell possono essere suddivisi in tre gruppi le funzioni di shell gli integrati della shell e i comandi esistenti in una directory nel vostro sistema Bash supporta degli integrati aggiuntivi che non si trovano nella normale shell Bourne Gli script di shell consistono di tali comandi organizzati come comanda la sintassi della shell Gli script vengono letti ed eseguiti linea per linea e dovrebbero avere una struttura logica 1 7 Esercizi Questi sono alcuni esercizi per prepararvi al prossimo capitolo 1 Dov posizionato il programma bash nel vostro sistema 2 Utilizzate l opzione versione per scoprire quale versione state facendo girare 3 Quali file di configurazione di shell vengono letti quando vi autenticate nel sistema usando l interfaccia grafica dell utente GUI o Graphical User Interface e quando aprite una finestra di terminale 4 Le seguenti shell sono shell interattive Sono shell di login Una shell aperta cliccando sullo sfondo della vostra scrivania grafica selezionando Terminal
221. tato di uscita dell accodamento in primo piano eseguito pi i recentemente Un trattino hyphen si espande alle correnti flag delle opzioni come specificato S dall invocazione attraverso il comando integrato set o quelle impostate dalla shell stessa come ad esempio i Si espande all ID di processo della shell Sl Si espande all ID di processo del comando in sottofondo asincrono eseguito pi Capitolo 3 L ambiente di Bash 56 di recente 0 Si espande al nome della shell o dello script di shell La variabile con la sottolinea underscore viene impostata all avvio della shell e contiene il nome di file assoluto della shell o dello script che viene eseguito cos come passato nella lista degli argomenti Viene anche impostata con l intero E percorso dei nomi di ciascun comando eseguito e piazzato nell ambiente esportato con quel comando Quando si controlla la posta questo parametro contiene il nome del file di posta 3 vs L implementazione di stata sempre un problema e realisticamente dovrebbe essere rimpiazzata con il comportamento di In quasi tutti i casi in cui i programmatori usano quest ultimi intendono pu causare errori ed anche falle nella sicurezza del vostro software I parametri posizionali sono le parole che seguono il nome di uno script di shell Essi sono collocati nelle variabili 1 2 3 e cos via Lunghe secondo necessit
222. tavia se siete interessati ai risultati intermedi che potrebbero essere ripristinati in caso di fallimento dello script questo non ci che volete L espressione comando amp gt file equivale a comando gt file 2 gt amp 1 11 3 Sommario Le funzioni forniscono un modo facile per raggruppare comandi che vi serve eseguire ripetitivamente Quando una funzione sta funzionando i parametri posizionali vengono modificati in quelli della funzione Quando si ferma essi vengono riportati a quelli del programma chiamante Le funzioni sono dei miniscript e proprio come gli script generano dei codici d uscita o di ritorno Sebbene questo sia stato un capitolo breve esso contiene nozioni importanti che servono a raggiungere lo stato supremo di pigrizia che l obiettivo tipico di qualsiasi amministratore di sistema 11 4 Esercizi Qui ci sono alcune cose utili che potete fare usando le funzioni 1 Aggiungete una funzione al vostro file di configurazione bashrc che automatizzi la stampa delle pagine man Il risultato dovrebbe essere che digitate qualcosa come printman lt comando gt in modo che la prima appropriata pagina man esca dalla vostra stampante Fate le verifiche usando una pseudo periferica di stampa per provare le funzionalit Come extra inserite la possibilit per l utente di fornire il numero di sezione delle pagina man che vuole stampare 2 Create una sottodirectory nella vostra directory personale
223. tdir gt tail 16 var spool mail anny From anny octarine Tue Jan 14 22 10 47 2003 Return Path lt anny octarine gt Received from octarine localhost 127 0 0 1 by octarine 8 12 5 8 12 5 with ESMTP id hOELA1BG020414 for lt anny octarine gt Tue 14 Jan 2003 22 10 47 0100 Received from anny localhost by octarine 8 12 5 8 12 5 Submit id hOELAltn020413 for anny Tue 14 Jan 2003 22 10 47 0100 Date Tue 14 Jan 2003 22 10 47 0100 From Anny lt anny octarine gt essage Id lt 200301142110 h0ELAltn020413 octarine gt To anny octarine Subject disk report Tue Jan 14 22 10 47 CET 2003 o Inizia a pensare di cancellare qualcosa C una partizione piena per 87 5 anny testdir gt Naturalmente dovreste aprire il vostro programma di posta per verificare i risultati questo solo per dimostrare che lo script invia un decente messaggio elettronico con linee di intestazione A Oggetto e Da Molti altri esempi dell uso delle istruzioni case si possono trovare nella directory di script init del vostro sistema Gli script di avvio usano i casi start e stop per far partire o fermare i processi del sistema Un esempio teorico si pu trovare nella prossima sezione 7 3 2 Esempio di initscript Gli initscript o script di inizializzazione spesso fanno uso delle istruzioni case per avviare fermare ed interrogare servizi di sistema Questo un estratto dello script che avvia Anacron un
224. te e La shell legge i dati in ingresso da un file da una stringa o dal terminale dell utente e I dati in ingresso vengono suddivisi in parole ed operatori obbedendo alle regole di virgolettatura v Capitolo 3 Questi spezzoni token sono separati da metacaratteri Viene eseguita l espansione l espansione degli alias La shell comprende analizza e sostituisce gli spezzoni come comandi semplici e composti e Bash esegue svariate espansioni della shell scindendo gli spezzoni espansi in elenchi di nomi di file comandi e argomenti Se necessario viene attuata la redirezione gli operatori di redirezione e i loro operandi vengono rimossi dall elenco degli argomenti e I comandi vengono eseguiti e Eventualmente la shell aspetta dei comandi per completare e ricevere il suo stato di uscita 1 4 1 2 Comandi della shell Un banale comando di shell come touch filel file2 file3 consiste nel comando stesso seguito da argomenti separati da spazi Comandi di shell pi complicati sono formati da semplici comandi combinati assieme in svariate modalit in una conduttura pipeline in cui il risultato di un comando diventa il dato in ingresso di un secondo in un costrutto iterattivo o condizionale o in qualche altro raggruppamento Una coppia di esempi ls more gunzip file tar gz tar xvf Capitolo 1 Bash e gli script di Bash 23 1 4 1 3 Funzioni della shell Le funzioni della shell sono un modo per raggrupp
225. temente Perl Tuttavia awk ha una curva di apprendimento pi accentuata significa che imparate molte cosa in un tempo piuttosto ristretto In altri termini Perl pi difficile da apprendere e Sia Perl che awk condividono la reputazione di essere incomprensibili anche per i reali autori dei programmi che usano tali linguaggi Perci documentate il vostro codice Capitolo 6 Il linguaggio di programmazione GNU awk 96 6 5 Esercizi Questi sono alcuni esempi pratici in cui awk pu essere utile 1 Come primo esercizio i vostri dati in ingresso sono linee nella forma seguente Nomeutente Nome Cognome Numero telefonico Realizzate uno script awk che converta tali linee in un record LDAP di questo formato dn uid Nomeutente dc esempio dc com cn Nome Cognome sn Cognome numerotelefonico Numero telefonico Create un file contenente una coppia di record di prova e controllate 2 Realizzate uno script Bash utilizzando awk e i comandi standard di UNIX che mostri i principali tre utenti dello spazio su disco nel filesystem home se non avete la directory contenente le directory personali su partizione separata create lo script per la partizione questa presente in ogni sistema UNIX Per prima cosa eseguite i comandi da linea di comando Quindi inseriteli in uno script Lo script dovrebbe creare un emissione sensata sensate per essere letta dal capo Se tutto si dimostra funzionante fate in modo che lo script vi
226. tenuto ci si riferisce usando le variabili Cos quando volete modificare un nome di un file in uno script dovete farlo una volta sola i Nomi di file con spazi L esempio soprastante fallir se il valore di 1 pu essere esaminato come a parole multiple In tal caso il comando if va corretto o utilizzando i doppi apici attorno al nome del file o usando il luogo di Capitolo 7 Istruzioni condizionali 106 7 2 2 costrutti iflthen else 7 2 2 1 In generale Questa la forma completa dell istruzione if if COMANDI PROVA then COMANDI CONSEGUENTI elif ALTRI COMANDI PROVA then ALTRI COMANDI CONSEGUENTI else COMANDI CONSEGUENTI ALTERNATIVI fi L elenco dei COMANDI PROVA viene eseguito e se lo stato di ritorno zero viene eseguita la lista dei COMANDI CONSEGUENTI Se COMANDI PROVA restituisce uno stato diverso da zero viene eseguita invece ogni lista elif e se il suo stato di uscita zero va in esecuzione la lista ALTRI COMANDI CONSEGUENTI ed il comando completo Se else seguito da un elenco COMANDI CONSEGUENTI ALTERNATIVI ed il comando finale nell ultima clausola if o elif ha uno stato di uscita diverso da zero allora va in esecuzione COMANDI CONSEGUENTI ALTERNATIVI Lo stato di ritorno lo stato d uscita dell ultimo comando eseguito o zero se non viene trovata vera nessuna condizione 7 2 2 2 Esempio Questo un esempio che potete inserire nel vostro crontab per un esecuzione quotidiana
227. tervalli forzatene questo comportamento impostando LC_COLLATE o LC_ALL a C 4 3 2 Classi di caratteri Le classi di caratteri si possono specificare all interno delle parentesi quadre utilizzando la sintassi CLASS dove CLASS definita nello standard POSIX ed ha uno dei valori alnum alpha ascii blank cntrl digit graph lower print punct space upper word o xdigit Alcuni esempi cathy gt ls ld digit dArwxrwxr x 2 CRU cathy 4096 Apr 20 13 45 2 cathy gt ls ld upper drwxrwxr 3 Gainy cathy 4096 Sep 30 2001 Nautilus ArWwXxrWXr x 4 cathy cathy 4096 Jul 11 2002 Openoffice orgl 0 ione I autlay cathy Sega 96 dle 1589 Scacco sele Quando attiva l opzione di shell extglob utilizzando l integrato shopt vengono riconosciuti diversi operatori estesi di comparazione dei modelli Leggete di pi nelle pagine info di Bash sezione Basic shell features gt Shell Expansions gt Filename Expansion gt Pattern Matching Capitolo 4 Le espressioni regolari 78 4 4 Sommario Le espressioni regolari sono degli strumenti potenti per selezionare delle linee particolari dai file o dai dati in uscita Molti comandi UNIX usa espressioni regolari vim perl il database PostgreSQL e cos via Si possono mettere a disposizione in qualsiasi linguaggio o applicazione utilizzando librerie esterne e si sono diffuse anche nei sistemi non UNIX Per esempio le espressioni rego
228. test gt awk print 1 2 test recordl datal record2 data2 kelly octarine test gt Se non mettete le virgole print tratter le voci in uscita come un solo argomento omettendo cos l uso del separatore di emissione predefinito OF S Qualsiasi stringa di caratteri pu essere utilizzata come separatore di campi in emissione impostando questa variabile integrata 6 3 2 2 Il separatore dei record in uscita L emissione di un a intera istruzione print chiamata record in uscita Ogni comando print d come risultato un solo record in uscita e e poi emette una stringa chiamata separatore dei record in uscita ORS Il valore predefinito di questa variabile n un carattere di nuovalinea Cos ogni istruzione print produce una linea separata Per modificare il modo in cui vengono separati i campi ed i record in uscita assegnate nuovi valori a OFS ed a ORS kelly octarine test gt awk BEGIN OFS ORS n gt n t arime S1 S2 res recordl datal gt record2 data2 gt kelly octarine test gt Se il valore di ORS non contiene un nuovalinea l emissione del programma avviene tutta insieme su una linea singola 6 3 3 Il numero di record L integrato NR contiene il numero dei record che vengono elaborati Viene incrementato dopo la lettura di una nuova linea di immissione Lo potete utilizzare alla fine per contare il numero totale dei record oppure in ciascun record di emissione
229. to di valori in generale e srererrrrierenerinie neve ri nere e rene sione ninionenno 146 10 1 2 Uso dell imiegratodeclatio corollario 146 10 13 Gosta nti sn PITTI TAO TETI ENTI TIRI RI 147 10 2 Vartiabili matrici lianas E an 148 102 1 Creazione delle matricis relais 148 10 2 2 Dereferenziamento delle variabili di una Matrice 149 10 2 3 Cancellare le variabili Metrical asfalata 149 10 24 Esempi di matriti ola Giai ALII 150 10 3 Operazioni su variabili ro iaia 152 10 31 Aritmetica con l vamiabili ia nta A aa 152 10 3 2 Lunghezza di una valable oliena 152 10 3 3 Trasformazioni drvangbili orlo l aa aarna 152 IKOR oont aate iao Pe E E aiar 155 10 5 Esercizi ar ela oi 155 Capitolo LE FUNZIONI nica 157 Kt INFOdizione saa rile elia 157 1l 1 1 CGosa sonole funzioni biella ell ilaele a 157 Tk 42Sinfassidelletunizione sss pe alate ale aio 157 11 1 3 I parametri posizionali nelle fUNZioni esrrererrrrerereceeze nere ci rea nere ce nie nere nizzeneneoo 158 Lists lefunZi Onine rn i ear E A eE E RTE ET E e e 159 11 2 Esempi di funzioni negli script sessesesseseesesesseserssessessrssessressrsseeseesseeseesssresseresseressseess 160 FIS I Riciclaggio rela ara aliena 160 L 2 2Impostazione del percorsi alal aaa ei 160 11 2 3 Copie di salvataggio in remoto ea 161 IMRS ALOI nnt a ne 1 Oria E TA Ra 162 ITEA Eseri oera e a a a A a a a E R e e a i E 162 Capitolo 12 Cattura
230. to readonly marca ogni Capitolo 10 Di pi sulle variabili 145 specificata variabile come immodificabile La sintassi readonly OPZIONE VARIABILI I valori di queste variabili dopo non si possono pi cambiare con un successivo assegnamento Se stata data l opzione ogni variabile si riferisce ad una funzione di shell v Capitolo 11 Se stata specificata a tutte le variabili si riferiscono ad una matrice di variabili Se non stato dato nessun argomento o stata fornita p viene mostrato un elenco di tutte le variabili a sola lettura Usando l opzione p l emissione pu essere reimpiegata come immissione Lo stato di ritorno zero a meno che sia stata specificata un opzione non valida una delle variabili o funzioni non esista oppure sia stata fornita per un nome di variabile al posto di un nome di funzione bob in readonly TUX penguinpower bob in TUX Mickeysoft bash TUX readonly variable 10 2 Variabili matriciali 10 2 1 Creazione delle matrici Una matrice array una variabile che contiene molteplici valori Ogni variabile pu essere utilizzata come matrice Non esiste un limite massimo alle dimensioni di una matrice e neppure un qualche requisito che le variabili membri siano indicizzate o assegnate in modo contiguo Le matrici partono da zero il primo elemento indicizzato con il numero 0 La dichiarazione indiretta si effettua utilizzando la seguente sintassi per dich
231. u disco al 90 esatto e minore del 10 Lo script dovrebbe usare tar cf per la creazione della copia di riserva e gzip o bzip2 per comprimere il file tar Mettete tutti i nomi di file in variabili Mettete i nomi del server remoto e della directory remota in variabili Ci vi semplificher il riutilizzo dello script o l effettuazione di modifiche su di esso nel futuro Lo script dovrebbe controllare l esistenza di un archivio compresso Se esiste per prima cosa rimuovetelo onde evitare la produzione di dati in uscita Lo script dovrebbe pure verificare lo spazio disponibile su disco Tenete in mente che in qualsiasi momento potreste avere i dati nella vostra directory personale i dati nel file tar e i dati nell archivio compresso tutti insieme nel vostro disco Se non ci fosse abbastanza spazio su disco uscite con un messaggio d errore nel file di registro Lo script dovrebbe ripulire l archivio compresso prima di uscire Capitolo 7 Istruzioni condizionali 113 Capitolo 8 Redigere script interattivi In questo capitolo tratteremo di come interagire con gli utenti dei nostri script Stampando messaggi comprensibili e spiegazioni Intercettando le immissioni degli utenti Mostrando l invito per le immissioni degli utenti Usando i descrittori dei file per leggere da e scrivere in molteplici file 8 1 Presentare dei messaggi per gli utenti 8 1 1 Interattivi o meno Alcuni script funzionano del tutto senza ness
232. uante volte volete con lo stesso script La tabella successiva offre una panoramica di altre utili opzioni di Bash Tabella 2 1 Panoramica delle opzioni Notazione abbreviata Notazione estesa Effetto Disabilita la generazione del nome dl file usando set f set o noglob gt metacaratteri globbing Stampa le linee in entrata alla shell come esse set V set o verbose vengono lette Stampa il tracciamento dei comandi prima della set x set o xtrace loro esecuzione La lineetta viene utilizzata per attivare una opzione di shell e un pi per disattivarla Non fatevi confondere da ci Nell esempio sottostante dimostriamo queste opzioni nella linea di comando willy scripts gt set v willy scripts gt ls ls script commentati sh aelpocilgia willy scripts gt set v SE TY Willy CHipes hlst script commentati sh Serion SA willy scripts gt set f willy scripts gt ls ss 2 No ewen rile or chase Capitolo 2 Scrivere e correggere gli script 39 willy scripts gt touch willy scripts gt ls script commentati sh Serpilts willy scripts gt rm willy scripts gt ls script commentati sh scriptl sh In alternativa questi modi possono essere specificati nello script stesso aggiungendo le opzioni desiderate alla dichiarazione di shell nella prima linea Le opzioni possono essere combinate come abitualmente il caso dei comandi UNIX
233. uccessivo var Usa il valore della variabile ID del processo 0 Nome del comando n Ennesimo argomento n da 0 a 9 Inizia un commento bg Esecuzione dietro le quinte break Interruzione nelle istruzioni di ciclo Appendice A Caratteristiche della shell 168 Comando Significato cd Cambia directory continue Prosegue un ciclo del programma echo Mostra le emissioni eval Calcola degli argomenti exec Esegue una nuova shell fg Esecuzione in primo piano jobs Mostra i lavori job attivi kill Termina i lavori in corso newgrp Trasferisce ad un nuovo gruppo shift Slitta i parametri posizionali stop Sospende un programma dietro le quinte suspend Sospende un programma in primo piano time Temporizza un comando umask Imposta o elenca i permessi dei file unset Cancella definizioni di variabili o funzioni wait Aspetta il termine di un lavoro dietro le quinte A 2 Caratteristiche differenti La tabella sottostante mostra le principali differenze tra la shell standard sh Bourne Again Shell bash Korn shell ksh e C shell csh e Compatibilit delle shell Dal momento che Bourne Again Shell un superinsieme di sh tutti i comandi sh funzioneranno anche in bash ma non viceversa bash ha molte pi caratteristiche di per se stesso e come dimostrato nella tabella sottostante molte di esse sono state incorporate da altre shell Poich l
234. uire delle semplici trasformazioni in testi da un file o da un incanalamento pipe Il risultato viene inviato allo standard output La sintassi del comando sed non ha specifiche di un file in uscita ma i risultati si possono salvare in un file utilizzando la redirezione dei dati in uscita L editor non modifica gli originali dati in ingresso Ci che distingue sed da altri editor come vi e ed la sua capacit di filtrare testi che riceve da fonti di incanalamento Non vi serve interagire con l editor mentre sta funzionando questo il motivo per cui sed talvolta viene definito un batch editor Tale caratteristica consente di utilizzare dei comandi di modifica negli script semplificando enormemente i compiti ripetitivi di revisione Quando si presenta la necessit di sostituire del testo in un grande numero di file sed di grande aiuto 5 1 2 comandi di sed Il programma sed pu eseguire sostituzioni e cancellazioni di modelli di testo utilizzando le espressioni regolari come quelle usate con il comando grep v Sezione 4 2 I comandi di modifica sono simili a quelli usati nell editor vi Capitolo 5 L editor di flussi GNU sed 80 Tabella 5 1 I comandi di sed per la modifica Comando Risultato a Aggiunge append del testo sotto la linea corrente Cambia change il testo nella linea corrente con quello nuovo d Cancella delete il testo i Inserisce insert il testo al di so
235. una interazione con l utente I vantaggi degli script non interattivi comprendono e Lo script funziona ogni volta in modo prevedibile e Lo script pu essere fatto girare in sottofondo Molti script comunque richiedono un immissione di dati da parte dell utente oppure di emettere dei dati in uscita all utente mentre stanno funzionando I vantaggi degli script interattivi sono tra le altre cose e Si possono realizzare script pi flessibili Gli utenti possono personalizzare lo script mentre sta girando o farlo comportare in modi diversi e Lo script pu riportare il suo avanzamento mentre sta funzionando Quando si scrivono gli script interattivi non bisogna lesinare nei commenti Uno script che stampi dei messaggi appropriati molto pi amichevole e pu essere corretto dagli errori in modo pi semplice Uno script potrebbe svolgere un lavoro corretto ma riceverete un sacco intero di chiamate per supporto se non informerete l utente su cosa esso stia facendo Perci inserite messaggi che dicano all utente di attendere un emissione perch in corso un calcolo Se possibile provate a fornire un indicazione di quanto a lungo dovr attendere Se l attesa richieder regolarmente un tempo lungo durante l esecuzione di un certo compito potreste prendere in considerazione di integrare alcune indicazioni sull elaborazione nei dati in uscita del vostro script Quando si presenta un invito all utente per un immissione sarebbe megli
236. unset Sezione 3 2 2 Sezione 10 2 3 Sezione 11 1 4 until Sezione 9 3 user input Sezione 8 2 1 Sezione 8 2 2 user messages Sezione 8 1 1 V variabili Sezione 3 2 Sezione 10 1 variabili globali Sezione 3 2 1 1 196 variabili riservate Sezione 3 2 4 variabili speciali Sezione 3 2 5 variable expansion Sezione 3 4 5 verbose Sezione 2 3 2 vi m Sezione 2 1 1 virgolettatura ANSI C Sezione 3 3 5 W wait Sezione 12 2 2 whereis Sezione 2 1 1 which Sezione 2 1 1 while Sezione 9 2 wildcards Sezione 4 2 2 3 word anchors Sezione 4 2 2 1 word splitting Sezione 3 4 9 X xtrace Sezione 2 3 1 Sezione 2 3 2 Y Z Indice 197
237. users 3 38pm up 18 days 5 37 4 users load average 0 12 0 22 0 15 USER Y FROM LOGIN IDLE JCPU PCPU WHAT roor Gey Sat Zoom 43250 0 243 0 056 F7lisla wily 80 Sac Zion 0 008 wiy pes 3 Sau Zion 3233m 30 396 36 395 Bale widiy ae Widlly prs 2 Gar 2pm 3339m 0 13s usr bin sereen I m setting two variables now mais te a scia olack And this is a number 9 I m giving you back your prompt now willy scripts gt echo COLOUR willy scripts gt echo VALUE willy scripts gt Questo il modo pi comune per eseguire uno script E preferibile eseguire uno script come questo in una sottoshell Le variabili funzioni ed alias creati in questa sottoshell sono noti solo alla particolare sessione di bash di tale sottoshell Quando quella shell termina e la genitrice riacquista il controllo tutto viene ripulito e ed ogni modifica di stato di shell eseguita dallo script viene dimenticata Se non mettete la directory scripts nel vostro PATH e la directory corrente non neppure nel PATH potete attivare lo script in questo modo I mome_script sh Uno script pu essere eseguito esplicitamente da una data shell ma in genere facciamo questo se vogliamo ottenere un comportamento speciale come ad esempio controllare se lo script funziona con un altra shell o stampare le tracce per la ricerca degli errori rbash nome_script sh sh nome_script sh bash x nome_script sh La sh
238. uto 1F color always less r Capitolo 11 Funzioni 157 11 2 Esempi di funzioni negli script 11 2 1 Riciclaggio Nel vostro sistema ci sono quantit di script che usano funzioni come modo strutturato di gestire serie di comandi In alcuni sistemi Linux per esempio troverete il file di definizione etc rc d init d function che riscontrabile in tutti gli script init Usando questo metodo operazioni comuni come controllare se il processo gira avviare e fermare un demone e cos via devono essere scritti solo una volta in modo generico Se la stessa operazione serve di nuovo il codice viene riciclato Potreste realizzare il vostro file personale etc functions che contenga tutte le funzioni che usate regolarmente nel vostro sistema in script differenti Mettete solo la linea etc functions da qualche parte all inizio dello script e potete riciclare le funzioni 11 2 2 Impostazione del percorso Questa sezione si potrebbe trovare nel vostro file etc profile La funzione pathmunge definita e poi usata per impostare il percorso per il root e e gli altri utenti pathmunge ii echo SPANI Moain egrso cr VAISI rnaen be sasa Velo il Elica PATH SPATH 1 else PATH 1 PATH Ieai asal Manipolazione del percorso ale j e ave 0 ee pathmunge sbin pathmunge usr sbin pathmunge usr local sbin TL pathmunge usr X11R6 bin dopo unset pathmunge La funzione consider
239. vello di esecuzione una configurazione di processi ogni sistema ha un livello di esecuzione singolo utente ad esempio per svolgere dei compiti amministrativi per cui il sistema deve trovarsi in una condizione di inutilizzo per quanto possibile come quando si sta ripristinando un file system critico da una copia di sicurezza Normalmente vengono configurati anche i livelli di esecuzione del riavvio e dello spegnimento I compiti da svolgere per avviare o fermare un servizio sono elencati negli script di avvio La configurazione di init una delle mansioni dell amministratore di sistema in modo che quei servizi vengano avviati e fermati al momento giusto Quando affrontate questo compito vi serve u7na buona comprensione delle procedure di avvio e spegnimento del vostro sistema D altronde vi consigliamo di leggere le pagine man di init e inittab prima di cominciare con i vostri script di inizializzazione personali Qui c un esempio molto semplice che produrr un suono all avvio ed allo spegnimento della vostra macchina bin bash i Mals aseripi sis for ereire Cini e Link in rc3 d S99audio greeting and rc0 d K0laudio greeting Gase MS IMEN STEE cat usr share audio at_your_service au gt dev audio ni scono cat usr share audio oh_no_not_again au gt dev audio i A di Capitolo 1 Bash e gli script di Bash 29 esac exit 0 L istruzione case spesso utilizzata in questo tipo di script descrit
240. y gt ls nonesiste ls nonesiste No such file or directory franky gt echo cea S gt L utente franky comincia con l inserimento del comando grep che determina l assegnamento della variabile _ L ID del processo della sua shell 10662 Dopo aver messo un lavoro job in sottofondo contiene l ID del processo del lavoro in sottofondo La shell in funzione bash Quando si commette un errore contiene un codice d uscita diverso da 0 zero 3 2 6 Riciclo degli script con le variabili A parte il rendere pi leggibile lo script le variabili vi consentiranno anche di applicare un script in un altro ambiente o per un altro uso Considerate l esempio seguente uno script molto semplice che esegue una copia di salvataggio backup della directory personale di franky su un server remoto bin bash Questo script esegue una copia di salvataggio della mia home directory cd home Questo Gree Lvanrcmivig tar cf var tmp home_franky tar franky gt dev null 2 gt amp 1 Per prima cosa rimuove il vecchio file bzip2 Redirige gli errori perch ne vengono generati alcuni se l archivio inesistente Quindi crea un nuovo file compresso rm var tmp home_franky tar bz2 2 gt dev null bzip2 var tmp home_franky tar Copia il file in un altro host abbiamo le chiavi ssh per fare questo lavoro senza interventi scp var tmp home_franky tar bz2 bordeaux opt backup franky gt dev null 2 gt amp 1 Crea una mar
241. y return set shift trap e unset Molti di questi integrati verranno trattati nei prossimi capitoli Per quei comandi esclusi facciamo riferimento alle pagine Info 1 3 3 Esecuzione di programmi da uno script Quando viene eseguito un programma che uno script di shell bash creer un nuovo processo bash ricorrendo ad una biforcazione fork Questa sottoshell legge le linee dello script di shell una per volta I comandi di ciascuna linea vengono letti interpretati ed eseguiti come se fossero stati battuti direttamente dalla tastiera Capitolo 1 Bash e gli script di Bash 22 Mentre la sottoshell elabora ogni linea dello script la shell genitrice aspetta che il processo figlio termini Quando non ci sono pi linee da leggere nello script di shell la sottoshell termina La shell genitrice si risveglia e mostra un nuovo invito 1 4 Costruzione di blocchi 1 4 1 Costruzione di blocchi di shell 1 4 1 1 Sintassi della shell Se i dati in ingresso non sono commentati la shell li legge e li suddivide in parole ed operatori utilizzando le regole delle virgolettature per definire il significato di ogni carattere in ingresso Poi queste parole ed operatori vengono tradotte in comandi ed altri costrutti che restituiscono uno stato di uscita utilizzabile per ispezioni o elaborazioni Il precedente schema biforca ed esegui fork and exec viene applicato solo dopo che la shell ha analizzato i dati in ingresso nel modo seguen
242. z Mostra gli attributi e valori di ogni variabile Quando si usa p le opzioni aggiuntive vengono ignorate Rende a sola lettura le variabili A queste variabili dopo non possono essere attribuiti SE valori con susseguenti istruzioni di assegnamento ed esse neppure possono essere eliminate SE D ad ogni variabile l attributo trace X Marca ciascuna variabile per l esportazione verso comandi successivi tramite l ambiente L uso di al posto di disabilita invece l attributo Quando si utilizza in una funzione declare crea variabili locali L esempio seguente mostra come l assegnamento di un tipo ad una variabile influenzi il valore bob in declare i VARIABILE 12 bob in VARIABILE stringa bob in echo VARIABILE 0 bob in declare p VARIABILE declare i VARIABILE 0 Notate che Bash ha un opzione per dichiarare un valore numerico ma nessuna per dichiarare valori stringa Questo perch di base se nulla stato specificato una variabile pu contenere qualunque tipo di dati bob in ALTRAVAR blah bob in declare p ALTRAVAR declare ALTRAVAR blah Non appena restringete l assegnamento di valori ad una variabile essa pu contenere solo quel tipo di dati Restrizioni possibili sono intero costante o matrice Guardate le pagine info di Bash per informazioni sullo stato di ritorno 10 1 3 Costanti In Bash le costanti si creano rendendo a sola lettura una variabile L integra
243. zzare script che accettino un numero variabile di argomenti 9 1 Il ciclo for 9 1 1 Come funziona Il ciclo for il primo dei tre costrutti di ciclo della shell Questo ciclo consente di specificare un elenco di valori Una lista di comandi viene eseguita per ciascun valore dell elenco La sintassi per questo ciclo for NOME in LISTA do COMANDI done Se in LISTA non presente viene rimpiazzato con in e for esegue COMANDI una volta per ciascun parametro posizionale che stato impostato v Sezione 3 2 5 e Sezione 7 2 1 2 Lo stato di ritorno lo stato d uscita dell ultimo comando eseguito Se non sono stati eseguiti dei comandi perch LISTA non si espande ad alcuna voce lo stato di ritorno zero NOME pu essere qualsiasi nome di variabile sebbene i sia usato molto frequentemente LISTA pu essere un qualunque elenco di parole stringhe o numeri che possono essere gi scritte oppure prodotte da qualsiasi comando COMANDI per andare in esecuzione pu anche essere un qualsiasi comando del sistema operativo script programma o istruzione di shell La prima volta che viene eseguito il ciclo NOME viene impostato con la prima voce di LISTA La seconda volta il suo valore viene impostato con la seconda voce in lista e cos via Il ciclo termina quando NOME ha assunto ciascun valore di LISTA e non sono rimaste voci in LISTA 9 1 2 Esempi 9 1 2 1 Uso della sostituzione dei comandi per sp

Download Pdf Manuals

image

Related Search

Related Contents

    TR7422U-OR - Continental Automotive  AUAV-X2 AND AUAV-X2Q USER MANUAL  SR900 Air Gap Slip Ring Service Manual - Aero  Avteq SS-38 flat panel floorstand  Mode d`emploi COTTON SOFT  user`s guide  Avaya BCM 2.0 ATA 2 User Guide  Phonix IP6PBCB mobile phone case  

Copyright © All rights reserved.
Failed to retrieve file