La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

CORSO AUTOGESTITO DI GNU/LINUX Riprendi in mano il TUO sistema Riprendi in mano il TUO futuro BASH SCRIPTING.

Presentazioni simili


Presentazione sul tema: "CORSO AUTOGESTITO DI GNU/LINUX Riprendi in mano il TUO sistema Riprendi in mano il TUO futuro BASH SCRIPTING."— Transcript della presentazione:

1 CORSO AUTOGESTITO DI GNU/LINUX Riprendi in mano il TUO sistema Riprendi in mano il TUO futuro BASH SCRIPTING

2 Cos'è uno script Uno script è una sequenza di comandi, codificata all'interno di un file, che se reso eseguibile, automatizza l'esecuzione di questi comandi.

3 Quando è utile uno script ? L'utilizzo più immediato è quello di automatizzare delle operazioni ripetitive e noiose. (ridimensionare tante foto, lavorare sui log, eliminazione selettivamente dei file) Sono fondamentali nell'amministrazione di un server...

4 Un primo esempio #!/bin/bash #Questo è il nostro primo script echo “ Ciao P2! “ marco@ono-deckmarco@ono-deck:~$ chmod +x filescript marco@ono-deckmarco@ono-deck:~$./filescript oppure marco@ono-deck:~$ sh filescript

5 Caratteri Speciali ## commento ; separa due comandi sulla stessa riga ' full quoting (tutto è una stringa) “ partial quoting (stringhe + variabili) : null command (NOP Nothing Operation) ! negazione * “wild card” per espansione del nome dei file oppure come operatore aritmetico ** operatore aritmetico

6 Caratteri Speciali 2, concatena operatori aritmetici. ` Sostituzione comando. Rende disponibile l'output di 'command' per l'assegnazione a una Varabile $() serve per assegnare un camndo ad una variabile (come sopra)

7 Caratteri Speciali 3 $ recupera il contenuto di una variabile $# numero di argomenti passati dalla linea di comando $@ contiene tutti gli argomenti passati dalla linea di comando $i i-esimo argomento passato dalla linea di comando ($0,$1,$2,$3)

8 Caratteri Speciali 4 $$ restituisce il pid (process id) prog1 | prog2 redirige l'outout del programma in input al secondo programma

9 Redirezione I/O Script > file scrive nel file l'output del programma Script >> file appende alla fine del file l'output dello script Command &> file scrive lo stdout e lo stderr del comando nel file Command >&2 redirige lo stdout del programma nello stderr

10 Redirezione I/O prog < file dà il file in input al programma prog <<fine dà in input una serie di comandi al programma Prog <<eof > input1 > input2 > eof...stampa aoutput...

11 FORK Nella maggior parte dei casi i programmi eseguibili da linea di comando sono bloccanti, ovvero la shell aperta resterà in attesa finquando il programma eseguito non termina. Per eseguire il programma e continuare a lavorare nella stessa shell, è necessario avviare il nuovo processo in modalità "background", ovvero Forkarlo. Il fork in shell avviene aggiungendo una & finale al comando, da non confondere con la & della redirezione. Sintassi: comando &

12 Variabili Per dichiarare una variabile si usa il seguante costrutto: nome=valore NOTA: non ci devono essere spazi tra “nome”, “=”, “valore” Un altro modo per dichiarare una variabile: declare nomevar

13 Array Per dichiarare array si usa il seguante costrutto: Array[0]=valore Array[1]=valore … array[n]=valore In modo più sintetitco: array=(valore1 valore2 valore3) E' possibile usare il comando declare: declare -a nomevar

14 Flags condizionali -d è una directory -e esiste file/direcotry -z stringa vuota?? -f è un file == ! != && || Test: ritorna il risultato un espressione booleana

15 Costrutto IF/THEN if [ condition1 ]; then if [ condition2 ]; then #do−something fi

16 Esempio #!/bin/bash if [ $# != 2 ]; then echo "$0 " exit 1 fi if [ -d $1 ]; then tar -cZf $2 $1 else if [ -f $1 ]; then tar -cZf $2 $1 fi

17 FOR for arg in list; do command(s)... done

18 WHILE while [ condition ]; do command(s)... done

19 ESEMPIO #!/bin/sh if [ $# != 1 ]; then echo sintassi: $0 cartella else files=$(ls $1) for i in $files; do echo $i done fi

20 UNTIL until [ condition−is−true ]; do command(s)... done

21 CASE (in) / esac case "$variable" in "exp1" ) command... ;; "exp2" ) command... ;; *) ;; esac

22 Funzioni La dichiarazione può avvenire in almeno tre modi: function nomefunzione function nomefunzione() nomefunzione() Le funzioni non accettano una lista di parametri in particolare, nè ritorano un valore. Sono da considerarsi come dei programmi normali. I parametri passati ad una funzione sono accessibili con $1, $2, $3,... e per avere la lista completa si usa $@, esattamente come lo script principale. Allo stesso modo, il return corrisponde all'exit status di qualsiasi altro programma ed è accessibile con $?. L'invocazione di una funzione è identico a quello di un programma. L'output di una funzione è quindi da considerarsi come l'output di un qualsiasi altro programma, analizzabile con $(funzione parametri).

23 echo Stampa a video l'input. Nel caso di istruzioni con escape (es. \a, \b) bisogna specificare -e. Se non si vuole stampare il fine linea si utilizza -n. echo -e "ciao\a" Stampa in output "ciao" e suona un companello.

24 read "read" non è un programma ma un comando interno alla shell. Serve a leggere riga per riga da un determinato input e salvarlo in una variabile d'ambiente. while cat file|read LINE; do echo $LINE done Stamperà il file riga per riga. In questo caso, read ritorna 0 finquando c'è qualcosa da leggere nel file, 1 altrimenti facendo quindi terminare il while. L'output di cat, che ripete il file, viene dato come input tramite pipe al comando read, che quindi consuma l'input riga per riga.

25 uniq && sort Uniq è un programma che permette di estrarre tutte le righe da un file senza duplicati. uniq file > senzaduplicati Sort ordina l'input restituendolo in output. L'ordinamento avviene riga per riga. sort file > ordinato

26 grep Questo programma è utile per fare ricerche utilizzando delle espressioni regolari all'interno di un file, riga per riga. grep qualcosa file1 file2... Le opzioni più comuni sono: -n visualizza il numero di riga corrispondente ad una occorrenza del risultato -r per eseguire la ricerca in sottocartelle -i per effettuare la ricerca in modo case-insensitive -v per invertire il risultato della ricerca grep -v "ciao$" file Troverà tutte le linee nel file che NON finiscono con "ciao".

27 head Visualizza le prime 10 righe di un file. head file Per specificare il numero di righe si utilizza l'opzione -n. head -n 1 file Visualizza la prima riga del file. Specificando -n -N, dove N è un numero, è possibile visualizzare il contenuto del file tranne le ultime N righe.

28 tail Visualizza le ultime 10 righe di un file. tail file Per specificar eil numero di righe si utilizza l'opzione -n. tail -n 1 file Visualizza l'ultima riga del file. Specificando -n +N, dove N è un numero, è possibile visualizzare il contenuto del file tranne le prime N righe, la prima inclusa.

29 awk AWK è un linguaggio di programmazione, implementato sotto i sistemi GNU/Linux principalmente da GNU (Gawk). Nello shell scripting, solitamente awk viene utilizzato per splittare (dividere in token) stringhe, piuttosto che sfruttarne tutte le sue potenzialità (programmazione di sockets, regexp, ecc.). awk file '{ print $1; }' Dato un file che contiene righe con parole divise da spazi, visualizza la prima parola per ogni riga. awk file '{ print $1 $3; }' In questo caso concatena prima e terza parola per ogni riga. Per specificare il delimitatore, invece che lo spazio di default, si utilizza l'opzione -F. Awk mette a disposizione alcune variabili utili relative all'input che producono utili informazioni nella processazione dei dati. Ad es. NF indica il numero degli split fatti per ogni riga. echo 122.254.978|awk -F. '{ print $2 " " NF; }' Visualizza 254 3.

30 sed Sed è un potente programma scritto da un italiano, Bonzini. Serve per effettuare molteplici operazioni di trasformazione dell'input; un coltellino svizzero. Anch'esso dispone di un metalinguaggio potente ma non general-purpose come awk. L'utilizzo più frequente di sed consiste nell'effettuare sostituzioni con espressioni regolari. echo ciao|sed 's/ia/ai/' Il comando in questione è "s" che indica a sed di effettuare una sostituzione. In questo caso, sostituisce tutte le occorrenze di "ia" con "ai" dando luogo all'output "caio" da un input "ciao". Sed di default lavora per riga. Nel caso si voglia effettuare delle sostituzioni in un file, e a sua volta salvare il risultato nel file stesso (invece che visualizzarlo in output) si utilizza l'opzione -i. sed -i 's/^ \+//' file Elimina tutti gli spazi all'inizio di ogni riga. Per delucidazione e caratteri speciali sulle espressioni regolari -> man sed.


Scaricare ppt "CORSO AUTOGESTITO DI GNU/LINUX Riprendi in mano il TUO sistema Riprendi in mano il TUO futuro BASH SCRIPTING."

Presentazioni simili


Annunci Google