INTRODUZIONE ALLA PROGRAMMAZIONE IN KORN SHELL E.M.



Похожие документы
Il sistema operativo UNIX/Linux. Gli script di shell

Funzioni in C. Violetta Lonati

L utility Unix awk [Aho-Weinberger-Kernighan]

Introduzione al MATLAB c Parte 2

Introduzione al Linguaggio C

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Introduzione alla programmazione in C

GLI SCRIPT DI SHELL. Lucidi a cura di B.De Carolis. UNIX shell script UdB- Dip Informatica

Laboratorio di Informatica

Calcolare il massimo di una lista

Introduzione al Python

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Richiesta pagina PHP (es: index.php)

La selezione binaria

Istruzioni condizionali. Istruzioni condizionali IF-THEN- ELSE IF-THEN-ELSE. Statistica computazionale Carla Rampichini a.a.

NOZIONI BASE SHELL E SCRIPT LINUX

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

Linguaggio di bash per esempi. Tre modi per quotare. Esempio. quotare: significa trattare caratteri speciali come normali caratteri

3. La sintassi di Java

APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL

Arduino: Programmazione

Algebra Booleana ed Espressioni Booleane

RISOLUTORE AUTOMATICO PER SUDOKU

I file di dati. Unità didattica D1 1

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Alcune regole di base per scrivere un programma in linguaggio C

PYTHON CHEAT SHEET. Rapido documentazione di consultazione per istruzioni, funzioni e tipi in Python. #stampa le variabili x e y

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

I Metacaratteri della Shell Unix

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

GESTIONE INFORMATICA DEI DATI AZIENDALI

NOZIONI BASE PER ESERCITAZIONI

Aritmetica dei Calcolatori 2

Calcolatori Elettronici Parte X: l'assemblatore as88

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

DAL DIAGRAMMA AL CODICE

Inizializzazione, Assegnamento e Distruzione di Classi

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Corso di Informatica

Descrizione di un algoritmo

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Le stringhe. Le stringhe

Funzioni. Il modello console. Interfaccia in modalità console

Esempi di algoritmi. Lezione III

Strutture di controllo del flusso di esecuzione

Esercizi su. Funzioni

4 3 4 = 4 x x x 10 0 aaa

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Informazione analogica e digitale

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Protezione. Protezione. Protezione. Obiettivi della protezione

Gestione dei processi

Dispensa YACC: generalità

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Operazioni di input e output in Fortran 90

Esercitazione Informatica I AA Nicola Paoletti

If a cascata, switch, boolean

Matematica in laboratorio

STAMPA UNIONE DI WORD

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Programmazione I - Laboratorio

Metodologie di programmazione in Fortran 90

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Prova di Laboratorio di Programmazione

SISTEMI DI NUMERAZIONE E CODICI

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Vettori ed assegnamenti in R

costruttori e distruttori

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag <script> inserito nella sezione <head> con la seguente sintassi:

Matlab: Gestione avanzata dei file

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Sistemi di Numerazione Binaria NB.1

TECNICHE AVANZATE DI I/O. Al loro livello più basso, tutti i file scritti sull hard disk. Training per esperti SU FILE

Esercizio 2. Client e server comunicano attraverso socket TCP

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

La programmazione. Sviluppo del software

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Primo scritto 11 Gennaio 2008

Fondamenti di Programmazione

Vettori Algoritmi elementari di ordinamento

Matlab: Strutture di Controllo. Informatica B

+ / operatori di confronto (espressioni logiche/predicati) / = > < Pseudo codice. Pseudo codice

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Транскрипт:

INTRODUZIONE ALLA PROGRAMMAZIONE IN KORN SHELL E.M. DAVID KORN, BELL LABS, "THE KORN SHELL COMMAND AND PROGRAMMING LANGUAGE", PRENTICE HALL, 989 esecuzione: - dalla shell (prompt $) $primo il file deve avere le protezioni di lettura ed esecuzione. - oppure, chiaman la shell esplicitamente: $ksh primo basta il permesso di lettura commenti nello script: carattere # si possono mettere anche righe vuote. nome dello script: puo' essere un nome riservato (shell statement o coman unix) script.ksh debug - debug totale: $ksh x scriptfile - debug parziale nello script : set x set +x # start debug # stop debug molti programmatori trovano conveniente usare la seguente scrittura: usage = usage: script parameteri non viene eseguita, ma puo essere stampata con $grep usage nome_script

scritture da script: $print stringa letture da script: $read nome $read uno due tre caratteri con significato particolare: $\#?[]*{} (); quoting (protezione): operazione mediante la quale viene mascherato il significato speciale dei caratteri. quoting mediante backslash: quello che segue immediatamente perde il suo significato particolare. $rm \$nome $rm $ nome attenzione: il backslash può quotare (proteggere) anche il significato particolare del cr. $print questa \ vrebbe essere una \ prova questa vrebbe essere una prova quoting mediante apostrofi : apostrofo singolo: tutto quello che e racchiuso tra apostrofi perde il suo significato particolare. $print $x scrive $x $print ciao a tutti scrive ciao a tutti $print ciao a tutti scrive ciao a tutti $rm $nome se nome ha caratteri speciali apostrofo ppio: quasi tutti i caratteri sono quotati tranne ` " $ \ $print $x scrive il valore di x $print ciao a tutti $print ciao a tutti $print n ciao inibisce eol $print n a tutti $print \nciao \na tutti \n introduce una newline $print \t ciao a tutti \t e un tab 2

Variabili - nomi: combinazioni di lettere, numeri e _ ma non possono cominciare con un numero - lunghezza: nessun limite - quantita di variabili: illimitate - lista delle variabili: $set - case sensitive valore di una variabile il valore della var nome si recupera con la scrittura $nome assegnazione $print x scrive x $print $y $print $x scrive il valore $print y=$x $print $y - n=00 (senza spazi ai lati di =!!) 2 - let n=00 3 let n = 00 4 ((n = 00)) assegnazione di tra due variabili: x=$n scrittura di una variabile: print $x print $usage= attenzione agli spazi! y = 00 errore y = nome errore 3

uso improprio del segno $: y=50 ok x=y assegna il nome y ad x x=$y assegna 50 ad x $x=$y errore tipi di dati - costanti - stringhe (default) - interi - array - globali (default) - statement typeset per definire i tipi di variabili - dimensione array: dipende dalla versione della shell, ma tipicamente 52 o 024 - array: solo ad una dimensione DICHIARAZIONE DI STRINGHE le stringhe vengono definite non appena viene scritto il nome della variabile lettera="a" stringa_numerica="2345" messaggio="chiamami al 386" print "ecco qualche stringa" print "$lettera, $stringa_numerica, $messaggio" DICHIARAZIONE DI VARIABILI INTERE integer variabile integer a a=00 print "a = $a" 4

inizializzazione di variabili: integer b=00 dichiarazione di costanti typeset -r nome_della_costante=valore dichiarazione di array: gli array vengono definiti appena viene assegnato un valore all'array. esempio di array di stringhe: a[0]="primo" a[]="secon" a[0]="decimo" questo e' un array di stringhe perche' non e' dichiarato diversamente. gli elementi non dichiarati sono stringhe nulle. esempio di array di interi: integer b b[]= b[2]=2 read b[0] inizializzazione: set -a a primo secon terzo 5

STAMPA DI UN ARRAY valori individuali print "elemento 0 = ${vettore[0]} indice=2 print "elemento $indice = ${vettore[$indice]} print tutto l'array print "array intero = ${vettore[*]} print l'uso delle {} va fatto solo quan si preleva un valore. esempio: a[]="primo" print ${a[]} v[0]=${a[]} 6

OPERAZIONI MATEMATICHE solo numeri interi (32 bit) con segno. non segnala errore se si usano variabili floating point ma esegue operazioni intere! operazioni ammesse: + - * / % << >> & ^(or esc.) sintassi con ppie parentesi! esempio: integer x integer y integer z ((z=x+y)) ((z=x-y)) ((z=x*y)) print " numero complessivo = $((x+y+z))" operazioni matematiche anche su variabili di tipo stringa! stampa di numeri negativi: opzione -r (altrimenti il segno meno (-) e' considerato una opzione!) priorita' delle operazioni: ) moltiplicazioni 2) divisioni 3) somme e sottrazioni 7

numeri in base 2, 8, 6 typeset -i x=23 typeset -i2 y typeset -i8 z typeset -i6 h h=z=y=x ( conversione automatica ) lettura da tastiera: scrivere 2#000 o 8#2 o 6#56 numero di cifre: typeset -zn variabile ( usa n cifre. solo con stringhe ) esempio: typeset -z4 numero numero=2345 print $numero ( 2345 ) numero=23 print $numero ( 023 ) 8

PATTERN MATCHING IN KORN SHELL uso di wildecards. ve si possono usare le wildecards? ) in alcuni comandi unix 2) nello statement case 3) nello statement for 4) nello statement set 5) nelle istruzioni di manipolazione stringhe wildecards: )? matching con solo carattere 2) [c c 2...c n ] carattere di quelli specificati esempio: ca[abz] caa, cab, caz ca[a-z][a-z] ca[0-9] ca[!abz] ca[\-\]\!\\] ca-, ca], ca! ca\ 3) * corrisponde con tutte le stringhe 4)?(stringa stringa 2 stringa n ) corrisponde con nessuna o con una delle stringhe specificate. esempio: care?(ful less free) care?([a-z] less) care?(???) care, careful, careless, carefree care, caret, careless care, carez, careto 5) @(stringa stringa stringa 3 ) solo una delle stringhe. 9

esempio: care@(a b c) carea, careb, carec 6) *(stringa... stringa n ) qualsiasi stringa inclusa la stringa nulla. esempio: p*(a b) p, pa, pb, pab, paa,... 7) +( stringa... stringa n ) come *, ma senza la stringa nulla. 8)!( stringa... stringa n ) corrisponde a tutte le stringhe fuorche' quelle specificate esempio: care!(*.bak *.out) tutte le stringhe tranne i nomi che finiscono in.bak o.out

tra numeri (( )) tra stringhe [[ ]] due punti (:) condizione true CONDIZIONI E CONFRONTI test su numeri: ==!= < > <= >= test su stringhe: =!= > < -z (stringa nulla) statement if--else. esempio : read n n2 if ((n<n2)) print $n minore di $n2 else print $n2 minore di $n fi 2 esempio: read n n2 if ((n<n2)) print $n minore di $n2 elif ((n==n2)) print $n uguale a $n2 else print $n maggiore di $n2 fi

attenzione: non mettere spazi! esempio: if [[$x=$y]] CONFRONTO TRA STRINGHE uso del pattern matching esempio: print n scrivi una stringa read nome if [[$nome=c*]] print $nome comincia con c fi if [[$nome!=*c]] print $nome non finisce con c fi if [[$nome=@[nome nome 2 nome n ]]] print $nome e uno dei nomi dati fi

operatori logici and, or: && esempio: if ((x<y)) && ((x<z)) print $x e minore di $y e $z fi statement case-esac sintassi: case $nome in nome ) nome2 ) print primo caso print ;; print secon caso print ;; [a-z][a-z]) print coppia di caratteri print ;; str @[str 2 str 3 ) print str str 2 oppure str str 3 print ;; str str 2 str 3 ) print str oppure str2 oppure str3 print;; *) print caso inatteso ;; esac

TEST SUI FILE elenco delle opzioni (file mode) : -a nome esiste? -f nome e un file regolare? -d nome e un direttorio? -c nome e un file di caratteri? -b nome e un file a blocchi? -p nome e una pipe? -s nome e un socket? -l nome e un link ad un altro oggetto? -s nome e non vuoto? elenco delle opzioni (protezioni): -r nome posso leggere? -w nome posso modificarlo? -x nome posso esguirlo? -o nome ne sono proprietario? -g nome e il mio gruppo? confronto sulle date: nome -nt nome2 nome piu nuovo di (newer than) nome2 nome -ot nome2 nome piu vecchio di (older than) nome2 nb: - se un file non esiste, la shell considera il file esistente piu nuovo - se nessun file esiste, il risultato e falso

CICLI IN KORN SHELL statement while esempio: integer n=0 while ((n<4)) ((n=n+)) ne statement until esempio: integer n=0 until((n>4)) ((n=n+)) ne statement for esempio: for n in 2 3 4 print valore di n = $n ne integer ris=5 for n in 0 00 000 ((ris=ris*n)) ne print ris=$ris

for nome in mario giuseppe vittorio print $nome ne statements break e continue: analogo al linguaggio c. break esce dal ciclo e continue lo riprende altri esempi: parsing di una stringa in parole: for parola in $linea print $parola ne lista dei file con permesso di lettura for nome in * tutti gli oggetti nella directory if [[-f $nome]] && [[-r $nome]] && [[-w $nome]] print il file regolare $nome puo essere letto e scritto fi ne

possono essere: PARAMETRI DI LINEA AD UNO SCRIPT - argomenti semplici (numeri stringhe pathname) - opzioni (per es. x o +x ) - redirezioni (> o <) parametri posizionali: $$ pid $# numero dei parametri $* stringa formata da tutti i parametri $@ espande gli argomenti $0 nome dello script, della funzione $ $9,${0} parametri esempio d uso di $# usage= usage: $0 parametri if (($# > 4)) print troppi parametri elif (($# == 4)) print ok for i in $@ print $i ne else print $usage fi

FUNZIONI IN KORN variabili globali: dichiarate implicitamente (stringhe) o dichiarate fuori da una funzione variabili locali: definite all interno di una funzione con typedef o integer le variabili riservate sono globali e ammessa la ricorsione i parametri passati ad una funzione sono recuperati con il meccanismo degli script uno script puo chiamare un altro script: il passaggio parametri e lo stesso delle funzioni ritorno parametri: - con return: ritorno un valore intero di 8 byte nella variabile $? attenzione: salvare subito $? perche e usata da tutti i processi (comandi, script ) per il valore di ritorno - tramite variabili globali - tramite file - con la scrittura a=$(nome_funzione param)

statement di base: - read - print - exec apre e chiude streams - operatori per la redirezione INPUT/OUTPUT read var - se non e indicata la variabile, l input viene messo in reply - prompt: read nome? scrivi il nome - il terminatore dell ingresso e dato dalla variabile ifs. di default, ifs=spazio tab return 2. esempio di ridefinizione di ifs: ifs=. - lettura di un ingresso piu lungo di una linea \ esempio: read var questa\ e \ una\ stringa - lettura all interno di un ciclo: while read var # continua a leggere fino a quan scrivo ^d ((tot=tot+var)) ne print totale = $tot - redirezione dell input totale: parziale: $script < file while read var ((tot=tot+var)) ne < file

print - opzioni: \a bell \b sovrascrive -r inibisce il significato del carattere backslash -- come r - redirezioni: #parsing di un file read inp? input file read out? output file while read stringa for word in $stringa print $word ne ne < $inp > $out exec apre un file per lettura e scrittura - apertura per read: exec 8< file# 8 e il descrittore del file - apertura per print: exec 8> file# idem - chiusura del file: exec 8<&- - lettura/scrittura: read u8 var / print u8 $var - cattura dell output ascii di un coman: var=$(coman-unix) esempio: var=$(ls l) var=$(sort filename) - lettura di un text file in una variabile stringa esempio: var=$(< filename) 2