• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Comandi per creare una Shell

Conficker001

Utente bannato
Autore del topic
2 Dicembre 2009
48
0
Miglior risposta
0
1) Parametri posizionali ed altre variabili predefinite della shell


La shell utilizza un tipo particolare di variabili, dette parametri posizionali, per memorizzare ed identificare i parametri passati ad uno shell script sulla linea di comando. Il primo parametro della linea di comando è memorizzato in una variabile chiamata 1, il secondo parametro è memorizzato in una variabile chiamata 2 , e così via per tutti gli altri parametri posizionali. Questi nomi di variabile sono riservati esclusivamente all'ambiente di shell, percio' non possono essere utilizzati dagli utenti per nominare le proprie variabili. Come per tutte gli altri tipi di variabili per accedere al contenuto di tali variabili si deve far precedere il nome della variabile scelta dall'operatore $ .

esempio

$1

per ricavare il contenuto del parametro posizionale 1

esempio

Questo shell script, chiamato reverse, stampa sullo schermo i parametri ad esso passati in ordine inverso

# echo "$2" "$1"
# reverse Ciao mondo
# mondo Ciao

( il carattere # indica il prompt )


Variabili di shell


# memorizza il numero di argomenti della linea di comando, che sono stati passati
allo shell script

? memorizza il valore numerico di uscita dell'ultimo comando che è stato eseguito

0 memorizza il nome dello shell-script, che è stato introdotto

* memorizza tutti gli argomenti che sono stati introdotti sulla linea di comando

! contiene il numero dell'ultimo processo che è stato mandato in background con la &

- contiene i flag con cui è stata eseguita la shell











--------------------------------------------------------------------------------


2) Espressioni condizionali

Sono utilizzate principalmente nei comandi if e while.
La sintassi è :


espressione


Per costruire l'espressione, si usano diversi operatori predefiniti, quasi identici a quelli del linguaggio C,di quattro tipi :

Operatori su interi

int1 <= int2 Restituisce TRUE se int1 è minore o uguale a int2

int1 >= int2 " " se int1 è maggiore o uguale a int2

int1 < int2 " " se int1 è minore di int2

int1 > int2 " " se int1 è maggiore di int2

Operatori su stringhe

str1 == str2 Restituisce TRUE se str1 è uguale a str2

str1 != str2 " " se str1 è diverso da str2

Operatori su file

-r filename Restituisce TRUE se filename è leggibile

-w filename " " se filename è scrivibile

-x filename " " se filename è eseguibile

-e filename " " se filename esite

-o filename " " se filename è posseduto dall'utente corrente

-z filename " " se filename è di dimensione zero

-f filename " " se filename è un file normale

-d filename " " se filename è un file directory

Operatori logici

exp1 || exp2 Restituisce TRUE se exp1 è vero o se exp2 è vero

exp1 && exp2 " " TRUE se exp1 è vero e exp2 è vero

! exp " " TRUE se exp è non vero











--------------------------------------------------------------------------------



3) Costrutti condizionali



IF

Ha due forme differenti :

if (espressione1) then
comandi
else if (espressione2) then
comandi
else
comandi
endif

if (espressione) comando
se l'espressione è vera, esegue l'unico comando, altrimenti non fa nulla


esempio

# /bin/tcsh
if ( { -f .profile } ) then
echo " C'è un file .profile nella directory corrente. "
else
echo " Non esiste il file .profile . "
endif


Nota : l'uso delle parentesi graffe serve a prelevare il contenuto dell'espressione, ed è analogo all'operatore accento grave ` [ASCII 96 ].










--------------------------------------------------------------------------------

SWITCH

La sintassi è :

switch (stringa1)
case str1:
comandi
breaksw
case str2:
comandi
breaksw
.
.
.
default:
comandi
breaksw
endsw

Confronta stringa1 con tutte le stringhe successive, che seguono la parola chiave "case" : se una di queste coincide con stringa1 si eseguono i comandi sottoindicati, altrimenti vengono eseguiti i comandi posti sotto la parola chiave "default".

Le stringhe possono contenere anche metacaratteri.

esempio

Questo programma riconosce se la prima opzione della linea del comando che lo richiama è -i o -e. Il programma ha come primo argomento un'opzione e come secondo un file. Se l'opzione è -i, il programma conta il numero di linee del file che iniziano con la lettera i, se è -e stampa le caratteristiche del file su video, altrimenti stampa un breve messaggio di errore.

# /bin/tcsh
switch ( $1 )
case -i:
set count = ` grep ^i $2 | wc -l `
echo " Il numero di linee in $2 è $count "
breaksw
case -e :
ls -al $2
breaksw
default :
echo " Errore "
breaksw
endsw











--------------------------------------------------------------------------------

4) Costrutti iterativi

FOREACH

la sintassi è:

foreach name (list)
comandi
end

name è una variabile di ambiente, list è un elenco di stringhe separate da spazi; alla prima iterazione nella variabile name è memorizzata la prima stringa di list, e i comandi operano sul valore attuale di name. Nelle successive iterazioni, name conterra' di volta in volta tutte le altre stringhe della lista.



esempio

Questo programma converte da minuscolo a maiuscolo il contenuto dei file elencati nella linea di comando(elementi della lista), e il risultato è memorizzato in file con stesso nome ma con l' estensione .caps .


#/bin/tcsh
foreach file ($*)
tr a-z A-Z < $file > $file.caps










--------------------------------------------------------------------------------


WHILE

La sintassi è la seguente:


while (espressione)
comandi
end


Esegue i comandi elencati fintantochè l' espressione è vera.

esempio

Questo programma stampa sul video in succesione il nome dei parametri presenti sulla linea di comando, insieme al numero che ne indica la posizione sulla linea stessa.

#/bin/tcsh
set count = 1
while ( "$*" != " " )
echo " Il parametro $1 ha il numero di ordine $count "
shift
set count = ` expr $count + 1 `
end










--------------------------------------------------------------------------------

SHIFT

La sintassi è la seguente:


shift n


dove n indica di quante posizioni della linea di comando si deve scorrere verso sinistra

Tale comando sposta i valori, correntemente memorizzati come parametri posizionali della linea di comando, di una posizione a sinistra se non viene specificato alcun parametro al comando shift.

esempio

se i valori attuali dei parametri posizionali sono :

$1 = -r $2 = file1 $3 = file2

eseguendo il comando :

shift

si ottengono i seguenti parametri posizionali :

$1 = file1 $2 = file2

Questo comando è molto utile quando è necessario interpretare le opzioni della linea di comando

esempio

Il seguente programma legge un file di input e converte il suo contenuto in lettere minuscole, e memorizza il risultato su un file di output. Al programma si passano come opzioni della linea di comando due opzioni e due file, uno quello di input e l'altro quello di output.

Se l'argomento è -i allora il programma interpreta l'argomento successivo come il nome del file di input. Se l'argomento è -o allora il programma interpreta l'argomento successivo come il nome del file di output.

#/bin/tcsh
while( "$1" != " " )
if ( "$1" == "-i" ) then
set infile = "$2"
shift 2
else if( "1" == "-o" ) then
set outfile = "$2"
shift 2
else
echo " Il programma non ha riconosciuto l'opzione $1 "
endif
end
tr a-z A-Z < $infile > $outfile










--------------------------------------------------------------------------------


REPEAT

La sintassi è la seguente :

repeat contatore comando

E' un comando presente solo nella tcsh, permette di eseguire un comando specifico per un numero di volte specificato dal valore assegnato alla variabile contatore.

esempio

Questo è un programma a cui vengono passati come opzioni della linea di comando un insieme di numeri, che il programma stampera' sullo schermo mediante un numero di punti pari al valore numerico passato come argomento della linea di comando. Questo programma si comporta come un un programma grafico primitivo.

# foreach num ($*)
repeat $num echo -n "."
echo " "
end











--------------------------------------------------------------------------------


5) Comandi vari

BREAK

È usato per interrompere l'esecuzione di un ciclo foreach o while. Il flusso dello shell script prosegue alla linea successiva a quella del ciclo.

sintassi:

break


esempio

#!/bin/tcsh
foreach number (one two three exit four)
if ($number == exit) then
echo " È stato raggiunto exit "
break
endif
echo $number
end










--------------------------------------------------------------------------------


CONTINUE

È usato per interrompere l'esecuzione di un ciclo foreach o while. Trasferisce il controllo all'ultima istruzione del ciclo così’ da far continuare il ciclo all'iterazione successiva.

sintassi:

continue


esempio

#!/bin/tcsh
foreach number (one two three exit four)
if ($number == exit) then
echo " È stato raggiunto exit "
continue
endif
echo $number
end











--------------------------------------------------------------------------------


GOTO

È usato per modificare il flusso di uno script file; con il comando goto si sposta l'esecuzione del programma al comando identificato dalla label indicata dal comando goto.

sintassi

goto label


esempio

#!/bin/tcsh
if ($#argv != 1) goto error1
if ($argv[1] < 6) goto error 2
goto OK

error1:
echo "ERRORE- numero sbagliato di argomenti"
echo "USCITA"
exit 1

error2:
echo "ERRORE argomento - deve essere maggiore di 5"
echo "USCITA"
exit 1

OK:
echo "Argomento = $argv[1]"
exit 1











--------------------------------------------------------------------------------


Lettura dell'input dell'utente

A seconda del sistema adottato, per memorizzare in una variabile lo standard input si puo' usare sia “$<“ che l'output del comando “head -1” ( tale comando deve essere racchiuso tra backquotes `head -1` ).

sintassi

set variable = $<

- oppure -

set variable = `head -1`


esempio

#!/bin/tcsh
echo -n "Input della tua variabile : "
set input = $<
echo " Hai digitato : $input "


- oppure -


#!/bin/tcsh
echo -n "Input della tua variabile : "
set input = `head -1`
echo " Hai digitato : $input "











--------------------------------------------------------------------------------


Gestione dell'interruzione

Il comando “onitr” sposta l'esecuzione, all'interno dello shell script, all'istruzione indicata dalla label, quando viene premuto il tasto (CTRL-C). Questa possibilita' puo' essere sfruttata per cancellare file temporanei e uscire da un programma che dovrebbe essere interrotto.

sintassi

onintr label


esempio

#!/bin/tcsh
onintr close
while (1 == 1)
echo " Il programma è in esecuzione "
sleep 2
end

close:
echo " Fine del programma program "





Bye :hacker: Fonte: Hack Book
 
Ultima modifica:
Inserisci la fonte entro 24h o sarò costretto a chiudere il topic ed infrazionarti.
 
Mi dispiace ma non posso accettare "Google" come fonte, è un motore di ricerca non una fonte specifica e valida

Le regole sono regole, quindi vedi di darti da fare per trovare la fonte buona, se hai il testo ci metti poco