Corso ForTIC C2 Cos`è la shell Le variabili d`ambiente L`uso della
Transcript
Corso ForTIC C2 Cos`è la shell Le variabili d`ambiente L`uso della
Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 Corso ForTIC C2 LEZIONE n. 8 ● ● ● Cos'è la shell Le variabili d'ambiente L'uso della shell per la realizzazione di semplici script I contenuti di questo documento, salvo diversa indicazione, sono rilasciati sotto una licenza Creative Commons License. Per prendere visioni dei termini della licenza visitare il sito http://creativecommons.org/licenses/by-nc-sa/2.0/ o richiederne una copia a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA Sandra Farnedi 1/9 Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 COS'E' la SHELL La shell è la parte più esterna del sistema operativo Linux, è cioè quella parte che consente l'interazione fra utente e macchina. In sostanza la shell è l'interprete dei comandi. Ogni utente ha una propria area ed un proprio ambiente di lavoro. All’interno di tale ambiente sono definite delle variabili di sistema che ne descrivono l'ambiente stesso. L’utente di Linux, utilizzando l’apposito linguaggio di shell, può costruire degli script che utilizzano i comandi e che vengono eseguiti secondo la logica descritta all’interno dello script stesso. Quando si vuole che i comandi in esecuzione non tengano bloccato o comunque non disturbino lo schermo di lavoro, se ne può richiedere l’esecuzione in background facendo seguire al testo del comando il carattere &, tale funzionalità può risultare estremamente utile nella costruzione di script che eseguono molti comandi. Il linguaggio della shell, viene interpretato dal comando /bin/bash che esegue i comandi nella sequenza in cui li incontra e, pur essendo piuttosto “primitivo” come linguaggio di programmazione, risulta estremamente potente nella realizzazione di script che consentono di pilotare il comportamento del sistema e che possono essere utilizzati anche per la gestione di pagine dinamiche nei siti Internet basati su server Linux. Esistono interi manuali che insegnano ad utilizzare la shell in modo efficiente, noi ci limiteremo a vederne alcuni esempi cercando di capire il significato delle singole istruzioni. Sandra Farnedi 2/9 Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 VARIABILI D'AMBIENTE Le variabili d'ambiente più usate sono (il carattere deve essere maiuscolo): HOME home directory dell’utente PATH elenco delle directory in cui la shell cerca i comandi PS1 prompt ($ per l'utente non privilegiato, # per l'utente root) PS2 prompt di continuazione (di solito >) PWD directory corrente SHELL shell scelta dall'utente TERM tipo di terminale Il valore di ciascuna variabile viene indicato con $nome-della-variabile Per conoscere il valore delle variabili d'ambiente eseguire il comando set Sandra Farnedi 3/9 Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 GLI SHELL SCRIPTS Uno shell script può ricevere in input sia parametri che opzioni e può anche utilizzare variabili speciali: $0 contiene il nome dello script $1 contiene il primo parametro $n contiene l'n-simo parametro $* contiene l'elenco dei parametri con esclusione di $0 $# contiene il numero di parametri $? contiene l'esito dell'ultimo comando Seguono alcuni esempi utili a chiarire il concetto di programmazione nella shell. Sandra Farnedi 4/9 Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 ESEMPI Esempio1 realizziamo uno script che visualizza, in ordine inverso, tre nomi passati allo script stesso come parametri. 1. Con l'editor vi creiamo un file di nome “inverti” contenente: #!/bin/bash echo $3 $2 $1 2. eseguiamo il comando chmod u+x inverti che assegna l'eseguibilità al comando 3. aggiungiamo al PATH la directory in cui il comando si trova PATH=$PATH:. 4. eseguiamo il comando inverti pippo pappo pluto e otterremo come risultato la scritta pluto pappo pippo (se non abbiamo eseguito il punto 3 dobbiamo eseguire il comando specificando ./inverti pippo pappo pluto Sandra Farnedi 5/9 Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 Esempio2 Lo script che segue1 legge le righe del file /etc/passwd e ne visualizza il contenuto sullo schermo precisando il significato di ogni campo. Se il nome del comando è listautenti esso viene richiamato dandogli in input il file /etc/passwd tramite ridirezione dell'input cioè listautenti</etc/passwd Il testo del comando sarà il seguente: #!/bin/bash IFS=: while read nome pass uid gid comm home shell do echo “***************” echo “Nome : $nome” echo “Password : $pass” echo “Uid : $uid” echo “Gid : $gid” echo “Commento : $comm” echo “Home : $home” echo “Shell : $shell” done IFS specifica il carattere usato come separatore. 1 Tratto da “Informatica” di Fabrizia Scorzoni ed. Loescher Sandra Farnedi 6/9 Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 Esempio 3 Quello che segue, è uno shell script che può essere utilizzato per cancellare i file in modo sicuro, spostandoli cioè in una directory “cestino” in modo tale da poterli recuperare se la rimozione fosse stata effettuata erroneamente. Per evitare appesantimenti del codice, non vengono effettuati controlli sulle eventuali situazioni d’errore e sul corretto uso del comando. Tramite un editor di testo (vi, gedit, kwrite ecc.) prepariamo lo script contenente le istruzioni della pagina seguente e lo salviamo nella nostra home directory chiamandolo “rimuovi”. Assegniamo al file rimuovi i diritti 755 e lo copiamo nella directory /bin (se non lo copiamo in /bin per richiamarlo dovremo specificare ./rimuovi) Proviamo poi ad eseguirlo utilizzando le varie opzioni previste. Sandra Farnedi 7/9 Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 SHELL SCRIPT PER LA REALIZZAZIONE DI UN CESTINO2 #!/bin/bash # rimuovi - script che cancella al max 4 file spostandoli nella # directory cestino da cui potranno essere recuperati qualora # fossero stati rimossi inavvertitamente. # Quando viene richiamato, il comando "rimuovi", genera una # directory chiamata "cestino" nella home directory dell’utente mkdir $HOME/cestino 2>/dev/null opzioni=false cancella=false svuota=false aiuto=false lista=false # leggiamo le eventuali opzioni: while getopts "csal" opzioni; do case "$opzioni" in c) cancella=true;; s) svuota=true;; a) aiuto=true;; l) lista=true;; esac done # opzione –c: cancella i file specificati spostandoli nel cestino if [ $cancella = true ] then mv $2 $3 $4 $5 $HOME/cestino fi # opzione –s: svuota il cestino if [ $svuota = true ] then /bin/echo "devo svuotare il cestino? (s/n)" read risposta if [ $risposta = 's' ] then rm -rf $HOME/cestino/* /bin/echo "cestino svuotato" else /bin/echo "svuotamento del cestino non effettuato" fi fi # opzione –l: mostra i file nel cestino if [ $lista = true ] then ls -la $HOME/cestino fi if [ $aiuto = true ] then /bin/echo "rimuovi –c[ancella] –s[vuota] –a[iuto] –l[ista] file1-4" fi 2 Esempio tratto da Imparare Linux in 24 ore – Bill Ball – ed. Tecniche Nuove Sandra Farnedi 8/9 Corso ForTIC C2 – IPC Falcone Gallarate Anno scolastico 2006/2007 ESERCIZI Preparare uno shell script che svolga in sequenza le seguenti operazioni: - controlli la correttezza formale del comando - si posizioni in una directory data - ne mostri il contenuto dettagliato - elimini tutti i file aventi un dato suffisso - ne mostri ancora il contenuto dettagliato 2. Preparare uno shell script che riceva in input un numero da 1 a 7 e fornisca in output il corrispondente giorno della settimana 3. Preparare uno script che, consultando un file che contiene una serie di parole italiane e la corrispondente traduzione in inglese, sia in grado di fornire la traduzione delle parole presenti 1. Sandra Farnedi 9/9