25
Naso Ing. Michele 1 Corso Linux Realizzazione di Script Mediante la BASH Bourne Again Shell BASH Interprete del linguaggio dei comandi Implementa il paradigma della programmazione strutturata secondo Bhom- Jacopini Serve un editor: utilizziamo gedit. Vanno bene anche nano, kwrite, vi, etc… Comando per eseguire la shell : /bin/bash 2 Naso Ing. Michele

BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Embed Size (px)

Citation preview

Page 1: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Naso Ing. Michele 1

Corso Linux

• Realizzazione di Script

• Mediante la BASH

• Bourne Again Shell

BASH

• Interprete del linguaggio dei comandi

• Implementa il paradigma della programmazione strutturata secondo Bhom-Jacopini

• Serve un editor: utilizziamo gedit. Vanno bene anche nano, kwrite, vi, etc…

• Comando per eseguire la shell : /bin/bash

2Naso Ing. Michele

Page 2: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Costrutti sintattici fondamentali

• Assegnazione

• Selezione o diramqzione

• Iterazione non condizionata e condizionata

3Naso Ing. Michele

Servizi dell’Interprete(fornite ad ogni esecuzione)

• Analisi lessicale: analizza che gli identificatori siano costruiti rispettando le regole: formati da caratteri alfabetici , numeri, ed il carattere _: devono iniziare per carattere. Non è case sensitive

• Analisi Sintattica: Rispetto delle regole di formazione delle istruzione

• Analisi Semantica: interpretazione del significato dell’istruzione e traduzione in linguaggio macchina

• Esecuzione del codice precedentemente prodotto

4Naso Ing. Michele

Page 3: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Struttura di uno script

#!/bin/bash

#La prima direttiva Non È UN COMMENTO e deve essere la prima

#direttiva

#Questi sono Commenti

# la prima istruzione si chiama shebang

# che chiama l’entrata in scena del’interprete dei

#comandi

[istruzioni che implementano lo script]

5Naso Ing. Michele

Proceduradi realizzazione di uno script• Scrivere lo script mediante un editor:

gedit• Fornire al file di testo la proprietà di eseguibile con il

comando:

chmod u+x script e• Esecuzione con il comando :

./nomescript• Per eseguire lo script senza indicare il percorso utilizzare il

seguente comando:

export PATH=“$PATH:.”Con l’ultimo comando s’inserisce nel percorso di ricerca dei comandi la directory corrente che si indica con il . (punto)

6Naso Ing. Michele

Page 4: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Istruzioni di assegnazione di valori alle variabilimodalità immediata

Per dichiarare e assegnare un valore ad una variabile si utilizza la notazione la coppia :

nome=valore(Attribute Value Pair:AVP)Esempimichele=3Si noti che = non è preceduto né seguito da uno spazio

caterina= bellissimanaso=‘Giovanni Paolo’

Nell’ultimo esempio si utilizzano gli apici singoli perché il valore è costituito da due parole

7Naso Ing. Michele

Istruzioni di assegnazione di valori alle variabilimodalità interattiva

Per assengare dei valori a delle variabili si usa l’istruzione read

read dato

Legge da tastiera , senza prompt,un valore e lo assegna alla variabile di nome dato

read -p “Inserisce il valore per :” dato

Legge da tastiera con il prompt, rappresentato dal messaggio tra virgolette,un valore e lo assegna alla variabile di nome dato

8Naso Ing. Michele

Page 5: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Istruzioni di assegnazione assegnazione del risultato di un comando ad una variabile

Con il comando substitution si assegna il risultato di un comando ad una variabile

pippo= ‛ ls -la‛

pippo conterrà l’elenco esteso della cartella. Si utilizzano gli apici rovesciati che si ottengono digitando AltGr+apice semplice oppure Alt+96

pippo= ‛ cat testo‛

pippo conterrà il contenuto del file di nome testo

Naso Ing. Michele 9

Parametri posizionali

Agli script si possono passare dei parametri, che seguono il nome dello script stesso e separati da spazi.

I parametri all’interno dello script sono identificati con $n dove n indica la posizione dell’argomento nel comando di attivazione dello script. Se n è >9 allora la sintassi diventa ${11}.

Con $0 s’indica il nome del primo argomento ossia il nome dello script

Naso Ing. Michele 10

Page 6: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Dichiarazione di variabili non inizializzate

Per dichiarare una vriabile si usa la

direttiva

declare nome

11Naso Ing. Michele

Parametri posizionali

Esempio

#!/bin/bashcho “Identificatore primo argomento: $1”

echo “Identificatore secondo argomento: $2”

echo “Nome dello script: $0”

#Se lo script si chiama michele e lo attivo con il #seguentecomando

michele caterina giovanni

avrò in outputIdentificatore primo argomento: caterina

Identificatore secondo argomento: giovanni

Nome dello script: michele

Naso Ing. Michele 12

Page 7: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Parametri posizionalivariabili speciali

$# Numero di parametri passati non è contato il nome dello script

$* Elenco di tutti i parametri escluso il nome

dello script formattati come un’unica stringa e gli argomenti separati da spazio

$@ Elenco di parametri ognuno dei quali è una stringa delimitata da doppi apici

$? Codice di uscita dell’ultimo comando

$_ Ultimo argomento dell’ultimo comando

invocato

Naso Ing. Michele 13

Dichiarazione di array

Per dichiarare ed inizializare un array si usa la seguente sintassi

array=(10 45 67 6)

Un elemento dell’array si indica

array[3]=89

Si accede attraverso la posizione indicata tra parentesi quadre: la prima posizione è la posizione 0

Naso Ing. Michele 14

Page 8: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Istruzione di visualizzazione del contenuto delle variabili

Per la visualizzazione, sul video, del contenuto

delle variabile o per mandare messaggi

all’utente si usa l’istruzione

echo $nomevariabile

Si deve fare precedere il nome della variabile

dal carattere $ (sostituzione per variabile) per

visualizzare il contenuto della variabile e non il

nome

Naso Ing. Michele 15

Istruzione di visualizzazione di un messaggio

Per visualizzare un messaggio racchiudere il

messaggio da singoli apici

echo ‘Ciao Mondo’

Si possono utilizzare anche i doppi apici

echo “Ciao Mondo”

Se nel messaggio vi sono contenuti di variabili

da sostituire bisogna utilizzare i doppi apici

Naso Ing. Michele 16

Page 9: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Istruzione di visualizzazione di un messaggio … continua

EsempioX=5echo ‘Questo è il risultato x’

Visualizza Questo è il risultato x

echo “Questo è il risultato $x”

Visualizza

Questo è il risultato 5

Naso Ing. Michele 17

Istruzione di visualizzazione di un messaggio … continua

Visualizzazione di un array di un suo elemento

echo ${vettore[1]}

Visualizza il secondo elemento dell’array

echo ${vettore[*]}

Visualizza tutti i componenti del vettore

echo ${#vettore[1]}

Visualizza il numero dei componenti dell’array

Naso Ing. Michele 18

Page 10: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Istruzione di visualizzazione di un messaggio … continua

Utilizzo delle sequenze di escape con l’istruzione echoLe sequenze di escape sono formate da un particolare carattere preceduto da \ che provocano delle azioni

Sequenze di escape

\\ visualizza il carattere \

\a segnale acustico

\n Line Feed: porta il cursore a capo ma sulla #stessa colonna

\r Carriage Return: porta il cursore sulla prima

colonna della stessa line\ff form fedd

\t tabulazione

Etc…

Naso Ing. Michele 19

Istruzione di visualizzazione di un messaggio … continua

Per utilizzare gli effetti delle sequenze di escapel’istruzione echo si utilizza l’opzione –e . Si tul

echo –e “Ciao \nMondo”

VisualizzaCiao

Mondo

echo –e “Ciao \n\rMondo”

VisualizzaCiao

Mondo

Naso Ing. Michele 20

Page 11: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Istruzione di visualizzazione di un messaggio … continua

Funzione del carattere \Il carattere \ serve, anche, ad eliminare gli effetti di particolari

caratteri che invece mantengono il loro significato letterale

echo “Ciao \“Amici””

Visualizza

Ciao “Amici”

I doppi apici non sono visti come delimitatori bensi come loro stessi rappresentanti.

\è utilizzato anche come continuatore di riga se l’argomento di echo è troppo lungo

Naso Ing. Michele 21

Espressioni aritmetiche

Le espressioni aritmetiche si formano combinando operatori aritmetici, variabili e costanti e

assegnando o modificando il valore di una variabile

Operatori aritmetici e loro usoL’operatore deve essere preceduto e seguito da uno spazio

-Operando1 #Nega algebricamente il valore #Operando1

Operando1 + Operando2 #addizioneOperando1 - Operando2 #sottrazioneOperando1 * Operando2 #MoltiplicazioneOperando1 / Operando2 #DivisioneOperando1 % Operando2 # Modulo, se i numeri sono postivi

#coincide cn il resto della divisione

Naso Ing. Michele 22

Page 12: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Espressioni aritmetiche… continua

Se Operando 1 dovrà contenere anche il risultato si può utuilizzare la sintassi del

linguaggi c, c++ e java

Operando1 += Operando2

Operando1 -= Operando2

Operando1 *= Operando2

Operando1 /= Operando2

Operando1 %= Operando2

Naso Ing. Michele 23

Espressioni aritmetiche… continua

Esempio

#!/bin/bash

read “Inserisci un numero” num1

num2=3

let risultato=num1 + num2

echo –e “il risultato è \t $risultato

Naso Ing. Michele 24

Page 13: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Espressioni logicherestituiscono un valore vero o falsoPrimitive che hanno come argomento un solo file

- r file # Controlla se il file è lettura

-w file # Controlla se il file è in scrittura

- e file # Verifica l’esistenza del file

-o file # Verifica se si proprietario del file

-z file # Verifica se la dimensione del file è 0

- s file # Verifica se la dimensione dell file è >0

- f file # Verifica se è il nome di file ordinario

-d file # Verifica se è il nome di una

# directorry

Naso Ing. Michele 25

Espressioni logicherestituiscono un valore vero o falso

Primitive che hanno come argomento due file

nomefile1 -nt nomefile2 # controlla se il primo file è stato modificato

#più recentemente che il secondo nt=new time

nomefile1 -ot nomefile2# controlla se il primo file è stato modificato

#meno recentemente del secondo ot=oldt ime

nomefile1 -et nomefile2#Controlla se i due file hanno lo stesso i-node sono lo stesso

# link hard

Naso Ing. Michele 26

Page 14: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Espressioni relazionalirestituiscono un valore vero o falso

Primitive che hanno come argomento due numerinum1 –eq nume2

# Controlla se i due valori sono uguali

num1 –ne nume2# Controlla se i due valori sono diversi

num1 –lt nume2# Controlla se il primo valore è < del secondo less then

num1 –le nume2# Controlla se il primo valore è < = del secondo less or equal

num1 –gt nume2# Controlla se il primo valore è > del secondo greather then

num1 –ge nume2# Controlla se il primo valore è > = del secondo greather or equal

Naso Ing. Michele 27

Espressioni relazionalirestituiscono un valore vero o falso

Primitive che hanno come argomento due stringhe

-z parola #Controlla se la parola ha 0 caratteri

-n parola # Controlla se la parola ha caratteri >0

parola1 = parola2 # parole con gli stessi caratteri

parola1 != parola2 # parole con gli caratteri diversi

parola1 > parola2 # parola1 lessicograficamente secondo il codice ASCII

# viene dopo la parola2

parola1 < parola2 # parola1 lessicograficamente secondo il codice ASCII

# viene prima della parola2

Naso Ing. Michele 28

Page 15: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Espressioni logiche complesse

Le espressione condizionali possono essere utilizzate come argomenti di connettori logici per creare condizioni più complesse

Connettori logicicondizione1 -a condizione 2

-a sta per and logico quindi il risultato complessivo è vero se entrambe le condizioni sono vere

condizione1 -o condizione 2

-o sta per or logico quindi il risultato complessivo è vero se almeno una delle due condizioni sono vere

Operatore logico di negazione

!condizione! Sta per NOT quindi il risultato è vero se la condizione è falsa e viceversa

Naso Ing. Michele 29

Connettivi per i comandi

Si possono fare eseguire, a Linux, due o più comandi legandoli tramire l’operatore logico , che si indica con && , oppure tramite l’operatore or, che si indica ||.

L’elaborazione avviene con il metodo short-cut ossia l’esecuzione del secondo comando dipende dal codice di uscita del primo.

Esempiocomando1 && comando2

Il comando2 è eseguito solo se l’esecuzione del comando1 ha avuto successo (exit status=0) altrimenti non viene eseguito perché sicuramente il risultato finale è comunque falso

comando1 || comando2 Il comando2 è eseguito se l’esecuzione del comando1 non ha avuto successo (exit code diverso da 0) perché se ha avuto successo il risultato finale è comunque vero

Naso Ing. Michele 30

Page 16: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Strutture sintattiche di selezionea una via

Struttura if … then

If [ condizione ]thencomando---

fiSe la condizione è vera sono eseguiti i comandi

seguenti il then fino alla clausola fi, if al contrario.

Il then è riconosciuto dopo l’invio o dopo il ; che segue la parentesi quadra chiusa.

Naso Ing. Michele 31

Strutture sintattiche di selezione

Struttura if … then.

Esempio: Scrivere uno script che visualizza il contenuto di un

file, passato come argomento, solo se è un file

ordinario.

#!/bin/bash

If [ -f $1 ]

then

echo -e “$1 è un file ordinario e questo è il contenuto\n”

cat $1

fi

Naso Ing. Michele 32

Page 17: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Strutture sintattiche di selezionea due vie

If condizione then … elseIf [ condizione ]thencomandiVero

elsecomandiFalso

fiSe la condizione è vera sono eseguite le istruzioni dopo la clausolal then fino ala clausola else esclusa, altrimenteverranno eseguite le istruzioni dopo dopo la clausola else fino alla fclausola fi

Naso Ing. Michele 33

Strutture sintattiche di selezionea due vie

If condizione then … else

Esempio: Scrivere uno script che ricevendo dalla linea di comando il nome di un file che può essere un file ordinario oppure il nome di una sotto cartella. della pwd

Se è un file ordinario visualizza il ontenuto altrimente visualizza l’eleco dei file contenuti nella direcotory

#!/bin/bashIf [ -f $1 ]

then echo -e “$1 è un file ordinario e questo è il contenuto\n”

cat $1else

echo -e “$1 è cartella e questo è il contenuto\n”

cd ./$1ls –la

fi

Naso Ing. Michele 34

Page 18: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Strutture sintattiche di selezionea due vie… generalizzato

if [ condizione1 ]

then

comandi1

elif [ condizione2 ]

then

comandi2

else

comandi3

F

Se ll condizione1 è vera sono eseguiti i comandi1 altrimenti si valuta la condizione2 se è vera si eseguono i comandi 2 altrimenti i comandi 3

Naso Ing. Michele 35

Strutture sintattiche

selezione multipla

case selettore invalore1)

comandi1 ;;Valore2)

comandi2 ;;valore3)

comandi3 ;;…

*) comandi_otherwise ;;esacL’istruzione confronta il valore contenuto nella variabile selettore con i valori indicati. Se lo trova esegue i comandi fino ai relativi ;;. Dopo l’esecuzione dei comandi passa al comando successivo alla clausola esac.. Se nessun valore è indicato nelle opzioni sono eseguiti i comandi relativi allo schema *). Se in corrispondenza si più valori bisogna eseguire gli stessi comandi si usa la sintassi valore1 | valore2 ! Valoren) comandi;; Nei valori si possonno utilizzare i metacaratteri: * ? e [] per raggrupare più valori con un’unica notazione. I metacaratteri hanno lo sstesso significato che hanno nei comandi

Naso Ing. Michele 36

Page 19: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Strutture sintattiche selezione multipla

EsempioScrivere uno script che calcola l’espressione aritmetica inviato con il comando

momescript op1 operatore op2#!/bin/bash

case $2 in

‘+’) let somma= $1 + $3

echo “ la somma vale $somma” ;;

‘-’) let diff=$1 - $3

echo “ La differanza vale $diff” ;;

‘*) let prodotto=$1 * $3

echo “ il prodotto vale $prodotto” ;;

‘/’) let quotziente= $1 / $2

let resto=$1 % $3

echo “il quoziente vale $quoziente”

echo “ Il resto vale $resto” ;;

*) echo “ Operazione non prevista” ;;

Esac

Naso Ing. Michele 37

Costrutti sintatticiiterativi: ciclo for

for var in lista_valori

do

comando1

comando2

done

La variabile assume ciclicamente i valori contenuti nella

lista_valori e per ogni valore esegui i comandi compresi

tra il do ed il done

Naso Ing. Michele 38

Page 20: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Costrutti sintatticiiterativi: ciclo for

Esempio1

Scrivere uno script che visualizza i parametri passati nella riga dei comandi

#!/bin/bash

for valore in $*

do

echo $valore

done

Naso Ing. Michele 39

Costrutti sintatticiiterativi: ciclo for

Esempio2Scrivere uno script che conta

Il numero di file contenuto nella sottodirectory comunicata con la riga di comando

#!/bin/bashsomma=0cd ./$1elenco=‛ls -la‛

for var in elencodo

let somma+=1doneEcho “ il numero dei file contenuto in $1 è $somma”

Naso Ing. Michele 40

Page 21: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Costrutti sintatticiiterativi condizionati: ciclo while

while [ condizione ]

do

comando1

comando2

comando3

done

I comandi compresi tra la clausola do e done sono eseguiti fino a quando la condizione è vera. Quando la condizione diventerà falsa sarà eseguito il comando dopo al done. Se per caso si va in loop interrompere l’esecuzione come al solito con il Ctrl+C

Naso Ing. Michele 41

Costrutti sintatticiiterativi condizionati: ciclo while

EsempioScrivere uno script che calcola il quadrato di un numero fornito in input e visualizza il quadrato come somma dei primi n numeri dispari

#!/bin/bash

dispari=1

somma=0;

read –p “inserisci un valore” x

indice=1

while [ indice .le. $x ]

do

let somma+=dispari

let dispari+=2

let indice+=1

Done

echo -e “IL quadrato di $x è /t $somma”

Se x=3 somma=1+3+5=9

Naso Ing. Michele 42

Page 22: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Costrutti sintatticiiterativi condizionati: ciclo until

until [condizione ]

do

comando1

comando2

….

done

La logica è dello stesso tipo della while con la differenza che i comandi sono eseguiti se la condizione è falsa ed quando la condizione sarà vera verrà eseguito il comando dopo la clausola done

Naso Ing. Michele 43

Costrutti sintatticiiterativi condizionati: ciclo until

Scrivere uno script che calcola il quadrato di un numero fornito in input e visualizza il quadrato come somma dei primi n numeri dispari

#!/bin/bash

dispari=1

somma=0;

read –p “inserisci un valore” x

indice=1

until [ indice .gt. $x ]

do

let somma+=dispari

let dispari+=2

let indice+=1

done

echo -e “IL quadrato di $x è /t $somma”

Se x=3 somma=1+3+5=9

Naso Ing. Michele 44

Page 23: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Le funzioni

La funzione è un oggetto che consente di organizzare uno script complesso in più sottoscript più semplice. E’ associabile alle macro di un macroassemblatore

Le funzioni vanno definiti all’interno dello script che li utilizza con la seguente sintassi:

#!/bin/bash

# Definizione di una funzione

function nomefunzione ()

{

[ dichiarazione di variabili locali con la keyword local]

Corpo della funzione

}

#attivazione funzione all’interno dello script

nomefunzione

All’interno di una funzione si puù utilizzare il comando return per interrompere l’esecuzione senza eseguire tutti i comandi. Le funzioni sono ricorsive quindi si posso implemetare algoritmi ricorsivi. Si possono utilizzare le variabili posizionali per pasare parametri nella riga di comando

Ogni funzione ha le proprie variabili posizionali

Naso Ing. Michele 45

Funzioni

Esempio

Scrivere uno script che leggendo tre numeri

associabili ai lati di un triangolo fornisce un

messaggio che dica se i tre lati formano o meno un

triangolo rettangolo

Lo script prevede una funzione che riceve un numero intero e restituisce il quadrato.

Lo script principale sfrutta la funzione per ottenere i

quadrati dei tre numeri letti e fa il test decisionale.

Naso Ing. Michele 46

Page 24: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

#!/bin/bash

function quadrato ()

{

local somma=0

local dispari=1

local indice =1

while [ indice .le. $1 ]

do

let somma+=dispari

let dispari +=2

let indice+=1

done

let risultato=somma

}

Naso Ing. Michele 47

read –p “Inserisci ulato minore ” x

quadrato xlet latoA=risultatoread –p “Inserisci lato intermedio” x

quadrato xlet latoB=risultatoread –p “Inserisci lato maggiore” x

quadrato xlet latoC=risultatolet sommaquadratocateti=latoA*latoA + latoB*latoBlet quadratoipotenusa=latoC*latoCIf [ sommaquadratocateti -eq quadratoipotenusa ]

thenecho ‘ Triangolo Rettangolo’

elseecho ‘Triangolo non rettangolo’

Naso Ing. Michele 48

Page 25: BASH - itiseuganeo.it · Naso Ing. Michele 1 Corso Linux •Realizzazione di Script •Mediante la BASH •Bourne Again Shell BASH •Interprete del linguaggio dei comandi •Implementa

Naso Ing. Michele 49