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