Introduzione alla Programmazione in Bash. E.Mumolo, DIA

Documenti analoghi
INTRODUZIONE ALLA PROGRAMMAZIONE IN KORN SHELL E.M.

Shell BASH. Variabili Redirezione

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

Manipolazioni elementari di flussi di testo strutturati

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

NOZIONI BASE SHELL E SCRIPT LINUX

La sintassi del C APPENDICE H

Shell di Linux e Comandi Utente

Ridirezione su/da file

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

LabVIEW parte II. Ing. Gianfranco Miele November 3, 2010

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Prima lezione di laboratorio. I mattoni di base di un programma Java. Comandi Unix. Riassunto. Oggi. Un programma complicato.

Il sistema operativo UNIX/Linux. Gli script di shell

I Metacaratteri della Shell Unix

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Lezione 2: Comandi avanzati della Shell di Unix

Lab. di Sistemi Operativi - Lezione in aula - a.a. 2012/2013

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Esercizi di Verifica Aprile 2005 Università disalerno

La shell di Unix. Uso interattivo e scripting

Corso ForTIC C2 LEZIONE n. 8. Cos'è la shell Le variabili d'ambiente L'uso della shell per la realizzazione di semplici script

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

Introduzione all'uso del sistema operativo Ubuntu

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi

Tipi di dato. Le variabili in C. Problema: dato in input un carattere, se esso è una lettera minuscola, trasformarla in maiuscola.

Laboratorio di Elementi di Architetture e Sistemi Operativi Esercizi del 28 Marzo 2012

Linguistica Computazionale

Laboratorio di Algoritmi e Strutture Dati

Caratteristiche di un linguaggio ad alto livello

Precedenza e associatività. Complementi sul C - 2. Esempi. Esempi

Lab. di Sistemi Operativi - Esercitazione - Comandi Shell

Esempi di domande della seconda provetta

cambiare utente mediante il comando su verificare chi siete e su che dir state lavorando Chi siete e che dir? (Inserisci la risposta)

PROGRAMMAZIONE CONSUNTIVA Codice Mod. RQ 23.2 Pag 1/5. Sistemi e Reti (articolazione Telecomunicazione) Classe

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

Struttura interna del sistema operativo Linux

VBA Principali Comandi

5. La programmazione nella bash shell

Gestione dei processi

Espressioni Regolari. Giancarlo Massidda

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

L utility Unix awk [Aho-Weinberger-Kernighan]

Strutture dati e loro organizzazione. Gabriella Trucco

Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova. Sistemi Operativi. Gianluca Della Vedova.

PRECORSO DI INFORMATICA. Laboratorio Prima Parte

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Scrittura formattata - printf

Espressioni regolari in Javascript (RegExp)

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

Lab. di Sistemi Operativi - Esercitazione n 2 - a.a. 2012/2013

Matlab 5. Funzioni. Slide basate sul corso di C. Blundo. A.A. 2010/ GPersiano. Laboratorio di Informatica per Fisici 1

Costrutti condizionali e iterativi

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Gestione di files Motivazioni

Laboratorio di sistemi operativi A.A. 2010/2011 Gruppo 2 Gennaro Oliva 4 Gli script di shell. #!/bin/bash

Problema: calcolare il massimo tra K numeri

Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

BASH. Breve introduzione alla programmazione della shell

28/02/2014 Copyright V. Moriggia

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

GLUG Govonis. Corso Avanzato GNU / Linux. Lezione del Shell

File System I parte. File System

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Funzioni di I/O per numeri. Input e output di valori numerici. Input formattato scanf. Stream preesistenti

Il linguaggio PHP. Elementi base

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

La shell di Unix. Uso interattivo e scripting

Definizione di processo Informalmente, il termine processo viene usato per indicare un programma in esecuzione RIENTRANZA DELLO SHELL

5 - Istruzioni condizionali

Corso Linux BASH. Realizzazione di Script Mediante la BASH Bourne Again Shell

Linguaggio C: introduzione

VISUAL BASIC FOR APPLICATION

Text files, streams. I file che ci interessano sono file di testo. anche se, logicamente, contengono numeri o altro

Il linguaggio C. Notate che...

Informatica (A-K) 7. Linguaggio C - 1

Le basi del linguaggio Java

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Link e permessi. Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione. Corso di Sistemi Operativi A. A

Uso del terminale in ambiente UNIX

IL LINGUAGGIO C NOSTRO APPROCCIO AL C. Sempre con esempi che illustrano le caratteristiche del linguaggio. SCRIVERE ED ESEGUIRE IL PRIMO PROGRAMMA C

PRECORSO DI INFORMATICA. Laboratorio Seconda Parte

Comunicazione tra processi: pipe Le pipe sono un meccanismo UNIX di Inter Process Communication (IPC)

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

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

Cenni sul preprocessore e il suo utilizzo

Istruzioni Condizionali in C

PROBLEMI E ALGORITMI VESPIA CATERINA LICEO CLASSICO AGLI ANGELI

Mirko Mariotti. March 9, 2009

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Ambienti Operativi: Windows Powershell

Aritmetica in Floating Point

Algoritmi e basi del C Struttura di un programma

CLI Workshop LD2011. Marco Albanese. 22 ottobre Marco Albanese () CLI Workshop LD ottobre / 17

Linguaggio C - sezione dichiarativa: costanti e variabili

Introduzione alla. Alessandra Giordani Lunedì 27 febbraio

Transcript:

Introduzione alla Programmazione in Bash E.Mumolo, DIA mumolo@units.it 1

Bash script Formato di uno script in bash: Per eseguire lo script come $./script # primo esempio di script echo $RANDOM commento Lo script deve essere leggibile ed eseguibile per poter essere eseguito Oppure si può chiamare la shell direttamente (basta il permesso di lettura): $bash script Metacaratteri (# *? > <! % % & ;, Apostro, Spazio): caratteri con signicato particolare Gli APOSTROFI hanno un signicato particolare: uble quote (ppio apice): single quote (apice singolo) : ' back quote (apice inverso): Istruzione di scrittura Per recuperare il contenuto di una variabile ` (si ottiene con AltGr ') Variabile d'ambiente 2

Quoting Quoting = disabilitazione dell'intrepretazione dei metacaratteri Uso di caratteri per disabilitare l'interpretazione di metacaratteri: Backslash: quota il carattere che segue (esempio \#) Single quote: tutti i caratteri circondati da ' perno il loro signicato tranne il carattere ' Double quote: tutti i caratteri circondati da perno il loro signicato tranne $ ` \ Variabili d'ambiente $set --- mostra tutte le variabili denite no a questo momento $env --- mostra solo le variabili d'ambiente denite dal sistema 3

Variabili Nomi: combinazione illimitata di lettere, numeri e underscore, MA: NON possono cominciare con numeri e sono CASE sensitive Lettura delle variabili dal terminale: istruzione read: $read nome $read uno due tre Il valore di una variabile si recupera con la scrittura $nome. ESEMPIO: $echo x # scrive x $echo $y $echo $x # scrive il valore $echo y=$x $echo $y Assegnazione: a=100 (senza spazi), a=$b 4

USO IMPROPRIO DEL SEGNO $: Tipi di dati TIPI DI DATI (deniti con gli statement typeset o declare): Costanti: typeset (o declare) r nome_della_costante=valore $ declare r a=1 Stringhe (default) oppure typeset $typeset lettera, stringa_numerica, messaggio $declare lettera, stringa_numerica, messaggio $lettera="a" $stringa_numerica="12345" $messaggio="chiamami al 3861" $echo "ecco qualche stringa" $echo "$lettera, $stringa_numerica,$messaggio" Y=50 ok x=y assegna il nome y ad x x=$y assegna 50 ad x $x=$y errore Interi: typeset i variabile oppure declare i variabile $typeset i a $a=100 $echo "a = $a" 5

Array Dichiarazione di array: typeset (o declare) a nome_array #array di stringhe $declare a arr $arr[0]="primo" $arr[1]="secon" $arr[10]="decimo" #Array di interi: typeset i b b[1]=1 b[2]=2 lettura di un elemento dell'array: read b[10] lettura dell'array no al CR: read b Stampa di un array: #Valori individuali echo "elemento 0 = ${vettore[0]} indice=2 echo "elemento $indice = $ {vettore[$indice]} echo ${a[1]} 6

Operazioni matematiche Solo numeri interi con segno Se si usano valori floating non segnala errore ma fa i calcoli con numeri interi Operazioni ammesse: + - * / % << >> & ^(or esc.) Operazioni matematiche anche su variabili stringa (conversione implicita) Se si racchiude l'operazione tra ((.)) il risultato viene convertito in numero altrimenti resta stringa Numeri in base 2, 8, 16 $typeset i x=123 $typeset i2 y $typeset i8 z $typeset i16 h $h=z=y=x # conversione automatica 7

Struttura di controllo if STATEMENT if-elif--else-. read n1 n2 if (( n1<n2 )) echo $n1 minore di $n2 else echo $n2 minore di $n1 ======================= Oppure (( $n1<$n2 )) Oppure: echo $n1 minore di $n2 else echo $n2 minore di $n1 read n1 n2 if (( n1<n2 )) echo $n1 minore di $n2 elif (( n1==n2 )) echo $n1 uguale a $n2 else echo $n1 maggiore di $n2 8

Condizioni e confronti TRA NUMERI (( )) TRA STRINGHE [[ ]] DUE PUNTI (:) CONDIZIONE TRUE TEST SU NUMERI: ==!= < > <= >= TEST SU STRINGHE: =!= > < -z (stringa nulla) Esempi: S1='string' S2='String' if [[ $S1!=$S2 ]] echo "$S1 non uguale a $S2" echo scrivi una stringa read nome if [[ $nome = c* ]] echo $nome comincia con c else echo non comincia con c 9

Operatori logici Operatori logici AND, OR: && declare i x declare i y declare i z read x read y read z if ((x<y)) && ((x<z)) echo "$x e minore di $y e $z" 10

Operatori logici Possibili opzioni : a nome esiste? f nome e un le regolare? d nome e un direttorio? c nome e un le di caratteri? b nome e un le 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? [[ a $nome ]] && [[ f $nome ]] && [[ s $nome ]] r nome posso leggere? w nome posso modicarlo? x nome posso esguirlo? O nome ne sono proprietario? G nome e il mio gruppo? [[ r $nome ]] && [[ w $nome ]] && [[ x $nome ]] 11

Strutture di controllo STATEMENT case-esac echo "scrivi nome" read nome case $nome in nome1) echo "primo caso" nome2) echo ;; echo "secon caso" echo ;; [a z][a z]) echo "coppia" echo ;; *) echo "caso inatteso" ;; esac for le in * # per ogni elemento della dir corrente case $le in # visualizza un messaggio *.txt) echo "$le: le di testo" ;; *.gif) echo "$le: le graco" ;; *.pdf) echo "$le: le PDF" ;; *.c) echo "$le: le sorgente" ;; *) echo "$le: le generico" ;; ne esac 12

Strutture di controllo STATEMENT WHILE STATEMENT UNTIL STATEMENT for for n in 1 2 3 4 echo valore di n = $n ne declare i n=0 while ((n<4)) ((n=n+1)) ne declare i n=0 until((n>4)) ((n=n+1)) ne for nome in mario giuseppe vittorio echo $nome ne typeset i ris=5 for n in 10 100 1000 ((ris=$ris*n)) ne echo ris=$ris oppure typeset i ris=5 for n in 10 100 1000 ((ris=$ris*n)) ne echo ris=$ris 13

Qualche esempio for parola in $linea #parsing di una stringa echo $parola ne for nome in * # lista dei le nella directory corrente # con permesso di lettura if [[ f $nome ]] && [[ r $nome ]] && [[ w $nome ]] echo " il le regolare $nome puo essere letto e scritto" ne Comandi composti: separati da punto e virgola $for n in *; if [ d $n ]; echo $n; ; ne $ls l while read l; echo $l;ne Attenzione: il ';' va ve ci sarebbe return nella notazione compatta della slide 8! 14

Parametri di linea ad uno script Possono essere: Argomenti semplici (numeri stringhe pathname), opzioni (per esempio 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 $1 $9,${10} PARAMETRI if (($# > 4)) echo "troppi parametri" elif (($# == 4)) echo "ok" for i in $@ echo "$i" ne else echo "$USAGE" 15

Parametri di linea ad uno script Funzioni in BASH Variabili globali: dichiarate implicitamente o dichiarate fuori da una funzione Variabili locali: denite all'interno di una funzione con typedef o declare Le variabili riservate sono globali E' ammessa la ricorsione I parametri passati ad una funzione sono recuperati con il meccansmo degli script Uno script può chiamare un altro script con lo stesso meccanismo del passaggio di parametri Ritorno parametri: Con Return:ritorno un valore di 8 bit nella variabile $? ATTENZIONE: salvare subito $? perchè è usata da tutti i comandi tramite variabili globali tramite le con la scrittura a=$(nome_funzione param) 16

Parametri di linea ESEMPI function sqr { ((s=$1*$1)) echo "quadrato di $1 = $s" } n=5 sqr $n function sqr { ((s=$1*$1)) return $s } n=5 sqr $n p=$? # da salvare perche echo modica la $? echo "quadrato di $n = $p" 17

Input/Output Istruzioni di base: Read Echo Exec apre e chiude streams operatori per la redirezione read var il terminatore dell'ingresso è dato dalla variabile IFS di default, IFS=spazio tab return Esempio di ridenizione di IFS: IFS=. declare i var # Lettura all'interno di un ciclo: declare i tot=0 while read var # continua a leggere no a quan scrivo ^d ((tot=$tot+$var)) ne echo "totale = $tot" 18

Input/Output Redirezione dell'input: Totale: $script < le Parziale: while read var ((tot=tot+var)) ne < aa echo $tot REDIREZIONI: #parsing di un le read inp read out while read stringa for word in $stringa echo "$word" ne ne < $inp > $out 19

Exec Istruzione Exec: apre un le per lettura e scrittura Apertura di un le per lettura: exec 8< le # 8 e il descrittore del le Apertura di un le per scrittura: exec 8> le # idem Chiusura di un le : exec 8<& Lettura/scrittura del le: read u8 var / echo u8 $var Cattura dell'output (testuale) di un coman: var=$(coman Unix) ESEMPIO: var=$(ls l) var=$(sort lename) Lettura di un le in una variabile stringa: var=$(< lename) 20

Segnali Segnali inviata dalla tastiera: control c INT (segnale nr.2) control \ QUIT (segnale nr. 3) control s STOP (segnale nr. 17) control q CONT (segnale nr. 19) Segnali inviati da un processo: coman kill $kill [ nomesegnale numerosegnale] PID Per catturare un segnale (tranne il segnale 9): istruzione TRAP Sintassi: trap 'uno o piu comandi Unix separati da ;' segnale ERRORE DI SCRIPT: trap 'echo c e stato un errore ' ERR FILE TEMPORANEI: trap 'rm /tmp/* > /dev/null ; exit' EXIT NB: EXIT è il segnale 0, che un processo invia al kernel quan termina Per evitare che un processo sia terminato da tastiera: trap INT QUIT 21

Esempi di cattura segnale Segnali # questo script cattura i segnali trap 'echo "ho ricevuto quit"' QUIT trap 'echo "ho ricevuto int"' INT count=1 while (:) #while true (( count=$count+1 )) ne 22

Varie Lunghezza stringhe: ${#stringa} Pattern matching in bash: * corrisponde a tutte le stringhe? corrisponde ad un singolo carattere qualsiasi \X disinibisce il signicato particolare del carattere X. Esempio: \\ rappresenta \ [ ] corrisponde a uno dei caratteri racchiusi [X-Z] corrisponde a tutti i caratteri dsa X a Z [^ ] (oppure [! ]) corrisponde a tutti i caratteri che non ci sono 23

Ereditare variabili Le variabili d'ambiente sono ereditate dai processi creati Le variabili utente NON sono ereditate dai processi creati $export nome_variabile fa sì che i processi creati ereditino la variabile I processi creati NON modicano l'ambiente del padre Per far si che uno script modichi l'ambiente del padre --> t script Esempio: $../script Dove Script può essere:!/bin/bash cd $1 24

Altri esercizi con riga di coman Contare i le creati, ad esempio, il 30 settembre ls l while read l; echo $l cut f6 7 d" ";ne grep "set 30" wc l Contare i processi che appartengono ad un dato proprietario Contare i le che appartengono ad un dato proprietario Contare i processi creati da init ps ef while read l; case $(echo $l cut f3 3 d" ") in 1)echo 1;esac;ne wc l 25

Esempi di Script #scrive il nome dei le leggibili e scrivibili se il nome contiene la stringa data USAGE='Use $0 <string>' if [ "$#"!= "1" ] echo $USAGE else for le in * if [[ $le = *$1* ]] && [[ r $le ]] && [[ w $le ]] echo $le ne Fi ====================================================================== # verica se la subdir esiste; se esiste, cambia directory corrente, # se non esiste, crea la directory e cambia directory. # if [ "$#" eq "0" ] echo "USAGE: $0 nomedir" exit if [[ a $1 ]] cd $1 else mkdir $1;cd $1 echo "script $0. Sono nella directory $PWD" 26

Esempi di Script # questo script aggiunge una intestazione data ai le specicati #script "lista le" "intestazione" for i in $1 #per tutti i le specicati ne echo e n "#\n#$2\n#\n" > temp cat temp $i > temp1 mv temp1 $i ===================================================================================== #scrive la stringa passata come argomento carattere per carattere declare i i declare i n l=$1 i=1 while (( i < ${#l} )) n=$i echo $(echo $l cut c $n $n) i=$i+1 ne 27

Esempi di Script #script stringa1 stringa2 stringa3 # se stringa2 e' contenuta in stringa1 sostituisce stringa2 con stringa3 # a=$1 b=$2 c=$3 l1=${#a} l2=${#b} l3=${#c} i=1 if [[ $a = *$b* ]] while(( $i<$l1 )) (( i1=$i+$l2 1 )) c1=$(echo $a cut c$i $i1) if [[ $c1 = $b ]] ((start=$i)) ((i=$i+1)) ne (( end=$start+$l2 )) (( start=$start 1)) testa=$(echo $a cut c1 $start) coda=$(echo $a cut c$end $l1) echo "$testa$c$coda" 28

Esempi di Script #script stringa1 stringa2 stringa3 # se stringa2 e' contenuta in stringa1 sostituisce stringa2 con stringa3 # # # Elaborazione di stringhe in bash #rimpiazza pattern con replacement in string: # ${string/pattern/replacement} # a=$1 b=$2 c=$3 echo ${a/$b/$c} 29

Esempi di Script # questo script sostituisce le parole che contengono una stringa p1 con la stringa p2 # nel le indicato nella lista data come terzo argomento #./subs.sh p1 p2 lista_le for i in $3 #per tutti i le indicati echo "le $i" while read n # $n contiene una stringa for k in $n # $k contiene parole if [[ $k = *$1* ]] echo n "$2 " else echo n "$k " ne echo ne < $i > temp mv temp $i ne 30

Esempi di Script #scrive le righe del le dal carattere c1 al carattere c2 # USAGE="Use: $0 <char1> <char2> <le>." declare flag="off" declare i c declare i length if (( $#!= 3 )) echo $USAGE elif [[ $1!=? ]] [[ $2!=? ]] echo $USAGE elif [[! f $3 ]] && [[! r $3 ]] echo "Il le non esiste o non è leggibile" else while read line for word in $line ((c=1)) ((length=$(echo $word wc c)) 1) #uguale a length=${#word} while (( $c < length )) character=$(echo $word cut c $c) if [[ $character = $2 ]] flag="off" if [[ $flag = "ON" ]] echo n $character if [[ $character = $1 ]] flag="on" ((c=$c+1)) ne ne < $3 ne 31

Esempi di Script USAGE="myls.ksh, stampa la lista dei le ordinati nel formato size nome lemode data" echo e "\n File ordinati per data \n" echo e "SIZE NOME FILE mode DATA \n" ls latr while read l; echo $l cut f5 5 d" ";ne >size.tmp ls latr while read l; echo $l cut f9 9 d" ";ne >nome.tmp ls latr while read l; echo $l cut f1 1 d" ";ne >mode.tmp ls latr while read l; echo $l cut f6 7 d" ";ne >data.tmp paste size.tmp nome.tmp mode.tmp data.tmp rm *.tmp # rimozione le temporanei echo e "\n\n return.. \n\n" read nn echo e "\n File ordinati per dimensione \n" echo e "SIZE NOME FILE mode DATA \n" ls lasr while read l; echo $l cut f5 5 d" ";ne >size.tmp ls lasr while read l; echo $l cut f9 9 d" ";ne >nome.tmp ls lasr while read l; echo $l cut f1 1 d" ";ne >mode.tmp ls lasr while read l; echo $l cut f6 7 d" ";ne >data.tmp paste size.tmp nome.tmp mode.tmp data.tmp rm *.tmp 32

Esempi di Script #legge tutti i le con estensione.log selezionan solo le righe di commento #che contengono la parola Giorgio e le scrivono accodanle sul le commenti.log #Si supponga che le linee di commento inizino con # #La sua attivazione può essere #./script >> commenti.ksh # for n in *.log echo "le $n" while read linea if [[ $linea = "#"* ]] for nn in $linea if [[ $nn = "Giorgio" ]] echo "$linea" ne ne < $n ne 33

Esempi di Script #scrive il le dato come argomento per righe alternativamente minuscole e maiuscole # USAGE="Use: $0 <le>." declare i nlet=0 if (( $#!= 1 )) echo $USAGE else if [[! f $1 ]] echo "il File non esiste!" else while read line for word in $line if (( $nlet%2 == 0 )) echo n $word " " else echo n $word " " tr '[a z]' '[A Z]' ((nlet=$nlet+1)) ne echo e n "\n" ne < $1 34

Esempi di Script #Questo script legge un le di testo (in cui nome viene dato in linea) e accoda in un #secon le (anch esso dato in linea) solo le righe che contengono parole che #cominciano (opzione d) o niscono (opzione c) con un numero. # #script [ d][ c] <nome1> <nome2> Il nr. corretto di parametri e' 3 # USAGE="script [ d][ c] <le1> <le2>" if (( $#!= 3 )) echo "errore nei parametri!" echo "$USAGE" else case $1 in d) while read linea for n in $linea if [[ $n = ["0" "9"]* ]] echo "$linea" ne ne < $2 >> $3 ;; c) while read linea for n in $linea if [[ $n = *["0" "9"] ]] echo "$linea" ne ne < $2 >> $3;; *) echo "switch errato!";; esac 35