max_linux2000
| Inviato il: 14/10/2010,15:03
|
...spesso e volentieri avremmo bisogno di creare uno script per automatizzare qualche cosa, come per esempiolo scaricamento di un sito,o di una lista di files, oppure elaborare una serie di dati per ottenere un risultato.
inizio qui una serie di piccole lezioni o meglio "ricette" per imparare i rudimenti della programmazione in Bash.
Innanzitutto Bash significa "Born Again SHell". Praticamente si tratta di una copia libera della primissima Shell unix di proprietà della americana AT&T di cui si erano conservati i diritti. Per maggiori info cercate su google "Storia di Unix"
La shell (chiamata impropiamente anche Terminale o Console) è un ambiente di sviluppo ove possiamo dare direttamente comandi, come per esempio formattare un HD, oppure creare script usando i comandi interni o esterni alla shell.
cominciamo com il primissimo e classico esempio di tutti i linguaggi di programmazione:
CODICE #!/bin/bash
clear echo Hello World!
Come vedete si tratta di un linguaggio molto semplice. La prima linea rimane sempre inalterata (nei sistemi Linux) diciamo che serve allo script per sapere dove si trova la shell ovvero dentro la directory /bin
clear serve per pulire lo schermo echo è equivalente a PRINT del basic e serve per mostrare a video i messaggi.
Per scrivere uno script possiamo usare un semplice editor di testi. Io uso il comando da terminale "mc" (una specie di norton Commander dell'ms-dos) ma è possibile usare qualsiasi altro, basta che il file venga salvato in testo semplice (ascii)
Ora scriviamo questo primo script nel nostro editor preferito e salviamolo con nome "Hello.sh" (.sh sta per Shell,ma è possibile omettere l'estensione o mettere qualsiasi preferiamo)
A questo punto lo script è pronto, man on funziona ancora per via della mancanza del permesso di esecuzione. Rimendiamo con il seguente comando:
CODICE $ chmod 750 Hello.sh
lo script è pronto,ora possiamo lanciarlo con:
il ./ serve per dire al sistema, che lo script si trova nella attuale directory e non dentro al $PATH. (più in la affronteremo anche questo argomenso se necessario)
| |
| | | | | max_linux2000
| Inviato il: 14/10/2010,20:20
|
bè.... dipende dove hai salvato il file Ciao.sh e con che nome.
Tieni conto che quando april il terminale, lui per default si posiziona nella tua home.... nel mio caso è:
/home/max
mentre nel tuo caso potrebbe essere
/home/ferrobattuto
il comando pwd ti dice in che directory ti trovi.
Chiaramente se tu hai salvato il file Ciao.sh nel Desktop, ovviamente il terminale non lo trova ...e te lo dice...file not found!
visto che tu conosci il DOS
DIR = ls
quindi apri il terminale e digita "ls" Sicuramente non troverai il file Ciao.sh
Okkio che Unix è case-sensitive, quindi per lui i file
Ciao.sh ciao.sh Ciao.SH
...sono tre file differenti
altri comandi equivalenti qui: http://it.kioskea.net/contents/linux/lincomm.php3
ciao MaX
| | | | max_linux2000
| Inviato il: 16/10/2010,11:59
|
Proseguiamo con le ricette.
Qui sotto metto uno script in cui affrontiamo la creazione delle Variabili, l'uso del comando che chiede al sistema la data e l'ora (date) e la creazione di un file vuoto (touch) Tutte cose che verranno utili a breve, quando per esempio automatizzaremo il backup dei nostri dati
CODICE #!/bin/bash # qui sopra il la solita linea che definisce il tipo di shell da usare # ricorda che per funzionare questo script deve avere i permessi di esecuzione # chmod 750 <questo script>
clear # puliamo lo schermo
DATE1=`date` # qui cominiciamo ad usare le variabili che ci serviranno moltissimo piu' avanti # Assegnamo alla variabile $DATE1 il risultato del comando date #(tra virgolette inverse per farlo eseguire all'interno delle script)
DATE2=`date +%Y-%m-%d` # qui assegnamo alla variabile $DATE2 il risultato del comando date ma # con alcuni parametri che provocano la scritture inversa della data, # utile per ordinare i file nel FileSystem
echo "Ciao, la data di oggi e' $DATE1" echo "ma posso scriverla anche in questo modo: $DATE2 se preferisci"
touch ~/Desktop/$DATE2.cancellami # il comando touch crea un file vuoto con il nome della data inversa.cancellami # la tilde ~ viene usata in unix per definire e localizzare la propia home
echo "ho creato un file di esempio nel tuo desktop con il nome $DATE2.cancellami"
| | | | max_linux2000
| Inviato il: 17/10/2010,15:32
|
Altra ricetta. Oggi impariamo a fare il backup dei nostri dati. Si tratta di creare un tar compresso (tgz) equivalente al .zip ma conservando le opzioni estese unix che altri sistemi operativi non hanno. Lo script è come di consuetudine commentato all'interno in modo che sia facile la sua comprensione anche dopo tempo. La directory a cui faremo il backup è Documents della propria Home, ma nulla ci impedisce di cambiarla nel caso che sia necessario.
CODICE #!/bin/bash
####### Configurazione ################################################ BACKUPDIR=~/BACKUP # Questa e' la directory dove copieremo i documenti in un file compresso # Possiamo cambiarla se necessario
DOC=~/Documents # Questa e' la directory da cui fare la copia di sicurezza. # Possiamo ovviamente cambiarla se necessario. # La ~ e' una abbreviatura per indicare la propria home. #######################################################################
# Inizio script ###############
mkdir $BACKUPDIR 2>/dev/null # Creo la directory ove immagazzinare i backup e, nel caso esista gia', # redireziono l'errore verso /dev/null per mezzo di 2>/dev/null
DATE=`date +%Y-%m-%d` # La data di oggi nel formato YYYY-MM-DD
clear # puliamo lo schermo
cd $BACKUPDIR # Entriamo nella directory dei backup per creare il file $DATE.tgz
echo Ora faccio il backup della directory $DOC nel file $DATE.tgz
sleep 2 # pausa di 2 secondi
tar \ --exclude=*.iso \ --exclude=*.vlc \ --exclude=*.avi \ -zcvf $DATE.tgz $DOC
# usiamo il comando tar con la seguente sintassi: # tar --exlude=qualche cosa -zcvf FileCompresso.tgz Directory-da-comprimere # l'opzione --exclude serve per ovviamente escludere qualche cosa. # Nel nostro caso ho scelto di non fare il backup dei file iso, vlc, avi. # Le opzioni -zcvf stanno per: -z usa gZIP, -c Comprimi, -v dall'inglese # verbose (mostra a video il log), -f nel seguente File ($DATE.tgz) # Il file compresso ha il nome data-di-oggi-inversa.tgz per merito della # variabile $DATE che abbiamo creato all'inizio di questo script
Modificato da max_linux2000 - 17/10/2010, 21:25
| |
| | |
|
Versione Mobile!
|
|
|
|