Se sei già registrato           oppure    

Orario: 26/04/2024 07:49:57  

 

Energia Alternativa ed Energia Fai Da Te > Sistemi operativi, hardware e programmazione.


Come fare script in Bash sotto Linux/Unix, Utility....molto utili :D
FinePagina

max_linux2000

Avatar
GigaWatt


Gruppo:Utente
Messaggi:2120

Stato:



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:


CODICE
$ ./Hello.sh


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)












 

Ferrobattuto

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4117

Stato:



Inviato il: 14/10/2010,20:01

Bene, chiarito che il segno del dollaro ($ equivale al prompt di MSDOS, eseguiti i due comandi che hai mostrato a me è uscito questo:

$ chmod 750 Ciao.sh
chmod: impossibile accedere a "Ciao.sh": Nessun file o directory

$ ./Ciao.sh
bash: ./Ciao.sh: Nessun file o directory

Ho sbagliato qualcosa? Ho messo "Ciao" al posto di "Hello" in quanto sono italiano.... faccine/biggrin.gif E immagino che sia un nome come un altro da dare al file. faccine/smile.gif

Ho provato prima con "echo" (che mi pare si usasse anche nel DOS, o quantomeno per programmare scritte a schermo con l'autoexec.bat) un paio di volte, e poi con "clear" per cancellare quello che avevo scritto, ed è andato bene. faccine/smile.gif

 

max_linux2000

Avatar
GigaWatt


Gruppo:Utente
Messaggi:2120

Stato:



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! faccine/biggrin.gif

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 faccine/biggrin.gif

altri comandi equivalenti qui:
http://it.kioskea.net/contents/linux/lincomm.php3

ciao
MaX

 

max_linux2000

Avatar
GigaWatt


Gruppo:Utente
Messaggi:2120

Stato:



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

Avatar
GigaWatt


Gruppo:Utente
Messaggi:2120

Stato:



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
 
 InizioPagina
 

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum