1 PROGRAMMAZIONE IN SHELL The Unix Programming Environment Kernigham - Pike.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME HOSTTYPE Per visualizzare il valore di tutte le variabili dambiente si usa il comando set.
PHP.
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Algoritmi e Programmazione
Esercitazione 2 Array, funzioni, form
Shell Scripting. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure contenuti.
1 System Call per Comunicazione tra Processi Pipe.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Iterazione enumerativa (for)
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Uso dei cicli y t =c+ty t-1 +e Un uso dei cicli può essere quello di creare una serie storica per cui y t =c+ty t-1 +e dove poniamo c e t scalari ed e~N(0,1).
Introduzione alla programmazione lll
Andrea Colombari, Carlo Drioli e Barbara Oliboni
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
La shell di Linux Linux ha una varietà di shell differenti:
Shell: variabili di sistema PATH HOME USER PWD SHELL HOSTNAME … Per visualizzare il valore di tutte le variabili dambiente si usa il comando set.
Sistemi Operativi - Shell 1 Il sistema operativo LINUX La shell Giorgio Di Natale Stefano Di Carlo Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Informazioni utili Per avere una distribuzione linux sul proprio pc: 1.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX La shell Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Dettagli e comandi avanzati Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX La shell Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX Shell: uso avanzato e script Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.
Lezione 2 Programmare in ASP
Corso di PHP.
4 Tipi di dati & variabili
Sistemi Operativi – La shell Salvatore Campagna Politecnico di Torino Dipartimento di Automatica.
Inserire il CDROM CygWin nel lettore, aprite la directory cyg e lanciare in esecuzione (con un doppio click del pulsante sinistro del mouse sulla relativa.
Lezione 6 Strutture di controllo Il condizionale
Shell dei comandi – ! Bash &/o Tcsh !
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Script 1 Marco D. Santambrogio – Ver. aggiornata al 2 Dicembre 2013.
BIOINFO3 - Lezione 221 Listruzione IF-ELSE prevede un secondo blocco di istruzioni da eseguire in alternativa al primo nel caso la condizione sia falsa.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
BIOINFO3 - Lezione 271 PATH DEL FILE Bisogna fare molta attenzione al path del file da aprire. Per non sbagliare converrebbe passare sempre il path assoluto.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Programmazione della shell pt.2
Prompt dei comandi – Windows XP In Windows XP si avvia con Start AccessoriSistema Prompt dei comandi … oppure con Start Esegui cmd.exe.
Costruzione di una semplice Agenda telefonica Elettronica Esercizio sull'uso delle principali system call Unix.
PHP - PHP: Hypertext Preprocessor. Introduzione PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
JavaScript Generalità Cos'è JavaScript?
Lezione 3 Struttura lessicale del linguaggio
Script di shell (bash).
1 Esercitazione Sistemi distribuiti: sistemi che risisedono su più calcolatori interconnessi da una rete di comunicazione Algoritmi distribuiti: programmi.
Introduzione a Javascript
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Il sistema Linux: principi di progettazione
Basi di Unix: introduzione Kernel il fulcro del sistema. Comunica con l’hardware (processore, memoria, disco fisso) Shell interfaccia tra l’utente e il.
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
Ancora sulla shell. Shell e comandi La shell e' un programma che interpreta i comandi dell'utente. I comandi possono essere dati da terminale, oppure.
1 SC per IPC Pipe. 2 Pipe : file speciali utilizzati per connettere due processi con un canale di comunicazione Se B cerca di leggere da una pipe vuota.
Corso di Laboratorio primo modulo Introduzione all'uso di un sistema operativo. Introduzione all'uso della shell (bash). Java – –Introduzione – –Tipi di.
INTRODUZIONE A MATLAB LEZIONE 2 Sara Poltronieri.
Informatica e Informatica di Base
Eprogram informatica V anno. Introduzione a PHP Introduzione La diffusione di PHP ha avuto un notevole incremento dalla fine degli anni Novanta a oggi,
Script bash I file di comandi in Linux. BASH  Bourne Again Shell  Modalità interattiva o batch (file di comandi)  Ambiente di programmazione “completo”
Tipi di Shell sh – Bourne shell csh – C shell ksh – Korn shell
Transcript della presentazione:

1 PROGRAMMAZIONE IN SHELL The Unix Programming Environment Kernigham - Pike

2 Osservazioni generali I vari interpreti dei comandi che si possono trovare su un sistema Unix (sh, csh, tcsh, ksh, bsh) sono molto simili fra loro Tutti funzionano anche come linguaggi di programmazione Tutti derivano dalla sh (shell) il primo interprete scritto per il sistema Unix Il programma sh si trova su qualsiasi macchina Unix, nella directory /bin

3 Osservazioni generali: Una sequenza di comandi shell puó essere data direttamente al terminale una riga dopo l’altra: prompt> ls -l prompt> date prompt> cp fileA fileB oppure scritta su un unica riga: prompt> ls -l; date; cp fileA fileB oppure inserita in un file di comandi, che viene detto: un Shell SCRIPT

4 Shell script un shell script puó essere eseguito con: prompt> sh scriptfile oppure puó essere trasformato in un nuovo comando del sistema rendendolo eseguibile: prompt> chmod a+x scriptfile prompt> scriptfile In ogni caso, il contenuto del file scriptfile viene interpretato usando la shell. Se si vuole che sia interpretato usando la csh bisogna aggiungere, come prima riga del file: #!/bin/csh

5 Shell Script: La stessa cosa vale se si usa la shell come linguaggio di programmazione. Si puó lanciare un programma shell in modo interattivo: prompt> sh/* entra in ambiente shell */ $ for i in fileA fileB > do > ls -l $i > done rwxr-xr-x st fileA rwx------st fileB $ exit/* esce dalla shell e torna in csh */ prompt>

6 Shell Script: oppure scrivere il programma in un shell script ed eseguirlo: for i in fileA fileB do ls -l $i done prompt> chmod a+x myscript prompt> myscript rwxr-xr-x st fileA rwx------st fileB prompt> myscript

7 Una directory di comandi personali La shell usa la variabile path settata nel file.cshrc per stabilire in quali directory cercare i comandi lanciati dall’utente. Ogni utente puó definire una propria directory di comandi, e poi modificare la variabile path in modo da lanciare i propri comandi senza specificare ogni volta il loro pathname (cioé proprio come se fossero un normale comando unix)

8 Una directory di comandi personali al fondo del file.cshrc inserire il comando: set path=($path ~myloginname/mycommanddir) /* aggiunge a path il nuovo pathname */ Eseguire poi il comando: source.cshrc /* rilegge il file.cshrc */ Ora i comandi dentro mycommanddir possono essere lanciati direttamente Attenzione: se aggiungete un nuovo file, perché sia immediatamente attivo date il comando: rehash

9 Lavorare in ambiente shell ATTENZIONE: tutto quello che vedremo funziona e si riferisce all’ambiente shell. Quando vi collegate al vostro account e usate un qualsiasi terminale virtuale state usando la cshell Per usare la shell in modalitá interattiva dovete entrare nell’ambiente shell lanciando: sh Per uscire dalla shell basta digitare dare il comando exit e ritornate alla cshell Il problema non si pone se usate shell script, che sono automaticamente interpretati usando la shell

10 Le variabili di shell La shell conosce un solo tipo di variabili: stringhe di caratteri Il nome di una variabile shell puó essere una qualsiasi sequenza di caratteri senza spazio e metacaratteri non quotati Lo stesso ambiente shell definisce ed usa un insieme di variabili per gestire correttamente la connessione dell’utente

11 Le variabili di shell dando il comando env si possono vedere tutte le variabili correntemente definite nell’ambiente di lavoro. Per definire una nuova variabile shell basta assegnarle un valore: prompt> myvar=pippo /* ricordate: niente spazi! */ per usare il valore di una variabile definita occorre anteporle il simbolo $ prompt> echo $myvar pippo prompt>

12 Assegnamento dell’output di un comando ad una variabile shell L’output di un comando puó essere assegnato ad una variabile shell, e poi usato: >pathname=`pwd` >echo $pathame >/docsrv/gunetti `pwd` apici

13 assegnazione di variabili da terminale echo “inserire nome e cognome:” read nome cognome echo “nome inserito = “ $nome echo “cognome inserito = “ $cognome prompt> myscript inserire nome e cognome: Mario Rossi nome inserito = Mario cognome inserito = Rossi prompt> myscript

14 Le variabili di shell Il valore di una variabile si usa direttamente: prompt> myvar1=/etc/passwd prompt> ls -l $myvar1 r-xr-xr-x root 4570 /etc/passwd Si puó concatenare ad un altro: prompt> myvar2=.old prompt> ls -l $myvar1$myvar2 r-xr-xr-x root 2620 /etc/passwd.old

15 Le variabili di shell Si puó concatenare una variabile ad una stringa qualsiasi racchiudendo il nome della variabile tra graffe o terminandolo con il back slash \: prompt> myvar1=/etc/pass prompt> ls -l ${myvar1}wd r-xr-xr-x root 4570 /etc/passwd oppure: prompt> ls -l $myvar1\wd.old r-xr-xr-x root 2620 /etc/passwd.old

16 Le variabili di shell Peró non si puó concatenare una variabile ad una stringa qualsiasi direttamente, perché quello diventa un nuovo nome di variabile non definita: prompt> myvar1=/etc/pass prompt> more $myvar1wd usage: more [...] [...] /*ERRORE nell’uso del more */ Le variabili non definite hanno il valore della stringa Null.

17 Alcune variabili predefinite: $$: PID della shell corrispondente $#: numero di argomenti di uno script shell $0: nome dello script shell $n: valore dell’ennesimo argomento dello script $HOME: home directory dell’utente $PWD: current working directory $path: elenco delle directory in cui cercare i comandi eseguiti

18 Script di uso delle variabili predefinite: file myscript: echo “questo script si chiama “ $0 “ ed ha PID = “ $$ echo “é stato chiamato con “ $# “argomenti” echo “il secondo argomento é “ $2 echo “é stato lanciato nella directory “ $PWD sh myscript qui quo qua questo script si chiama myscript ed ha PID é stato chiamato con 3 argomenti il secondo argomento é quo é stato lanciato nella directory /docsrv/gunetti/tmp

19 Il costrutto FOR for var in val_1 val_2... val_N do comandi shell done la variabile var assume in successione ad ogni ciclo, i valori val_1, val_2,..., val_N

20 Il costrutto FOR for var in * do comandi shell done la variabile var assume come valore, in successione ad ogni ciclo, il nome degli oggetti (file, sottodirectory) della directory corrente.

21 Il costrutto FOR for var do comandi shell done la variabile var assume come valore, in successione ad ogni ciclo, il nome degli argomenti passati in input. prompt> myscript pippo pluto myscript

22 Il costrutto FOR: esempio for i do grep $i elenco_telefonico done prompt> cerca_elenco rossi bianchi cerca_elenco

23 il comando TEST: test [-flag] espressione Restituisce true o false a seconda del tipo di test e dell’espressione coinvolta. Viene usato in tutti i costrutti condizionali: –if-then-else –while-do –until-do puó essere usato per testare variabili shell e file

24 il comando TEST: l’elenco completo dei flag é sul manuale. Esempi: –test s1 = s2 /* vero se s1=s2 - attenzione al blank */ –test s1 != s2 /* vero se s1 diverso da s2 */ –test s /* vero se s non é la stringa vuota */ –test -r file /* vero se file esiste ed é leggibile */ –test -f file && test -s file /* vero se file é regolare e non ha dimensione 0 -- || (doppia pipe) é l’or */ –test ! -s file /* vero se file e’vuoto -- ! é la negazione */ –test n1 -gt n2 /*vero se n1 é maggiore di n2 */ –test n1 -le n2 /* vero se n1 é minore o uguale a n2 */

25 if-then-else: if then [else ] fi il ramo else é opzionale piú if-then-else possono essere nidificati

26 if-then-else - esempio: var_A=ciao var_B=hello if test $1 = $var_A then echo “Ciao! Come stai?” else if test $1 = $var_B then echo “hello! Come stai?” else echo “non mi saluti?” fi

27 case Esecuzione in condizionale di piú alternative case in ) ;; ) ;; [*) ;;] esac

28 case - esempio: read saluto case $saluto in ciao) echo “CIAO!”; echo “Come stai?”;; hello) echo “Hello!”; echo “Come stai?”;; *) echo “EMBÉ?”;; esac

29 while - do / until - do while do done Esegue il loop se restituisce true until do done Esegue il loop se restituisce false

30 while - do - Esempio: who | grep $1 > tmpfile while test -s tmpfile /* tmpfile non é vuoto */ do echo “l’utente “ $1 “ é collegato” sleep 60 who | grep $1 > tmpfile done echo “l’utente “ $1 “ non é collegato”

31 until - do - Esempio: who | grep $1 > tmpfile until test ! -s tmpfile do echo “l’utente “ $1 “ é collegato” sleep 60 who | grep $1 > tmpfile done echo “l’utente “ $1 “ non é collegato” occhio alla negazione!

32 Selezione di porzioni di stringhe: cut -bX-Y filename –taglia verticalmente filename prelevando per ogni riga solo i caratteri dall’X-esimo all’Y-esimo echo “dipartimento” | cut -b3-7 –restituisce la stringa parti a=`who am i | cut -b1-4``hostname | cut -b1-4` –setta la variabile a come la concatenazione dei primi 4 caratteri del login e del nome dell’host.

33 Raggruppamento di comandi: ( lista di comandi ) –particolarmente utile per eseguire comandi in una directory particolare specificata all’interno delle parentesi: (cd subdir; rm tmpfile) al termine la directory corrente non é cambiata

34 Calcoli aritmetici: “expr” expr expr premette di usare le variabili shell con significato numerico, ed eseguire semplici calcoli: >div=2 >result=`expr 10 / $div` >echo $result 5 > Occhio agli spazi!

35 expr - Esempi: Cont=10 while test $cont -gt 0 do echo “cont = “ $cont cont=`expr $cont - 1` done l’uso di espressioni complesse è un pó goffo: result=`expr “(“ 10 \* 5 “)” / 2`