[Risolto] BASH: come usare le funzioni?

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Sargonsei
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2614
Iscrizione: domenica 17 febbraio 2008, 13:56

[Risolto] BASH: come usare le funzioni?

Messaggio da Sargonsei »

Salve a tutti.
Ho scritto il seguente script BASH:

Codice: Seleziona tutto

#!/bin/bash
#
# Questo script utilizza Imagemagick® creare una immagine contenente un testo 
# 1) La cartella di lavoro è quella in cui vuole creare l'immagine da sovrascrivere.
# 2) Salvare questo script nella cartella di lavoro, col nome "scriptCreaTesto2.txt".
# 3) Assicurarsi che questo script sia eseguibile.
# 4) Impostare le variabili seguenti secondo il risultato che si vuole ottenere.
# 5) Aprire un terminale nella cartella di lavoro ed impartire il comando "./scriptCreaTesto2.txt".
#
# Inizio istruzioni BASH.
# Impostazione variabili.
Magick0='convert' #  Con Imagemagick® 6 o precedenti, togliere il commento a questa riga.
# Magick0='magick' #  Con Imagemagick® 7 o successive, togliere il commento a questa riga.
#
Out0='Testo2.jpg' # Nome ed estensione del file contenente testo.
Testo0='Contenuto \ndel \ntesto da inserire' # Contenuto del testo da inserire.
Sf0='Green' # Colore dello sfondo del testo (''=default='White'=BIANCO).
Font0='DejaVu-Sans' # Nome del font di caratteri da utilizzare (''=default).
AltCar0='48'        # Altezza del font di caratteri da utilizzare (''=default='12').
ColCar0='Cyan'       # Colore del testo (''=default='black'=NERO).
ColBor0='red' # Colore del bordo del testo (''=default).
DimBor0='1'    # Spessore del bordo del testo (''=default).
PosTest0='Center'   # Giustificazione del testo (''=default='West'=SINISTRA).
#
# Ridefinizione contenuto variabili.
if [[ -n "$Sf0" ]] # Verifica se la variabile Sf0 ha un contenuto
then
    Sf0=" -background "$Sf0
fi
if [[ -n "$Font0" ]] # Verifica se la variabile Font0 ha un contenuto
then
    Font0=" -font "$Font0
fi
if [[ -n "$AltCar0" ]] # Verifica se la variabile AltCar0 ha un contenuto
then
    AltCar0=" -pointsize "$AltCar0
fi
if [[ -n "$ColCar0" ]] # Verifica se la variabile ColCar0 ha un contenuto
then
    ColCar0=" -fill "$ColCar0
fi
if [[ -n "$ColBor0" ]] # Verifica se la variabile ColBor0 ha un contenuto
then
    ColBor0=" -stroke "$ColBor0
fi
if [[ -n "$DimBor0" ]] # Verifica se la variabile DimBor0 ha un contenuto
then
    DimBor0=" -strokewidth "$DimBor0
fi
if [[ -n "$PosTest0" ]] # Verifica se la variabile PosTest0 ha un contenuto
then
    PosTest0=" -gravity "$PosTest0
fi
Testo0=" label:'"$Testo0"' " 
#
# Composizione riga di comando.
C1=`echo $Magick0 $Sf0 $ColCar0 $ColBor0 $DimBor0 $Font0 $AltCar0 $PosTest0 $Testo0 $Out0`; echo $C1; eval $C1 # Mostra ed esegue il comando contenuto nella variabile $C1
che funziona perfettamente, ma ho notato che la sezione "Ridefinizione contenuto variabili" è molto ripetitiva, quindi pensavo di creare una funzione tipo

Codice: Seleziona tutto

if [[ -n "$Var0" ]] # Verifica se la variabile $Var0 ha un contenuto
then
    Var0=" -gravity "$Var0
fi
da richiamare tutte e 7 le volte che occorre.
So che la cosa è possibile, ma non so come si fa a passare correttamente gli argomenti della funzione.
Qualcuno è in grado di fornirmi la sintassi corretta per la funzione e per le righe che la richiamano?
Ringrazio fin d'ora chi mi aiuterà.
Postare l'output di un comando significa inserire nel post: la riga in cui si digita il comando, tutto l'output, e la riga in cui il prompt ricompare.
Hardware e Sistema Operativo di Sargonsei: http://sargonsei.altervista.org/hardwar ... r-fisso-2/
Comandi da tenere a portata di mano: http://sargonsei.altervista.org/655-2/
Avatar utente
Sargonsei
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2614
Iscrizione: domenica 17 febbraio 2008, 13:56

Re: [Risolto] BASH: come usare le funzioni?

Messaggio da Sargonsei »

Ho risolto consultando le pagine web
http://www.pluto.it/files/ildp/guide/abs/functions.html
http://www.pluto.it/files/ildp/guide/abs/localvar.html
Preciso che avevo già visto quella pagina, ma non avevo capito che: sebbene una variabile dichiarata "locale" abbia significato solo all'interno del blocco di codice della funzione, di default le variabili non sono locali.
Allego copia della mia soluzione.

Codice: Seleziona tutto

#!/bin/bash
# 
# FUNZIONA
#
# Questo script utilizza Imagemagick® creare una immagine contenente un testo 
# 1) La cartella di lavoro è quella in cui vuole creare l'immagine da sovrascrivere.
# 2) Salvare questo script nella cartella di lavoro, col nome "scriptCreaTesto0.txt".
# 3) Assicurarsi che questo script sia eseguibile.
# 4) Impostare le variabili seguenti secondo il risultato che si vuole ottenere.
# 5) Aprire un terminale nella cartella di lavoro ed impartire il comando "./scriptCreaTesto0.txt".
#
# Inizio istruzioni BASH.
# Impostazione funzione Fun1
Fun1 () # Questa è la prima riga con cui si dichiara la funzione Fun1
{ Var0=$2
if [[ -n "$2" ]] # Verifica se la variabile Var0 ha un contenuto
then
    Var0="$1 $2"
    echo "Valore di ritorno:" $Var0
    return
fi
} # Questa è l'ultima riga in cui si dichiara la funzione Fun1
#
# Impostazione variabili.
Magick0='convert' #  Con Imagemagick® 6 o precedenti, togliere il commento a questa riga.
# Magick0='magick' #  Con Imagemagick® 7 o successive, togliere il commento a questa riga.
#
Out0='Testo0.jpg' # Nome ed estensione del file contenente testo.
Testo0='Contenuto \ndel \ntesto da inserire' # Contenuto del testo da inserire.
Sf0='Green' # Colore dello sfondo del testo (''=default='White'=BIANCO).
Font0='DejaVu-Sans' # Nome del font di caratteri da utilizzare (''=default).
AltCar0='48'        # Altezza del font di caratteri da utilizzare (''=default='12').
ColCar0='Cyan'       # Colore del testo (''=default='black'=NERO).
ColBor0='red' # Colore del bordo del testo (''=default).
DimBor0='1'    # Spessore del bordo del testo (''=default).
PosTest0='Center'   # Giustificazione del testo (''=default='West'=SINISTRA).
#
# Ridefinizione contenuto variabili.
Fun1 " -background " "$Sf0"    # Richiamo funzione con 2 parametri
Sf0=$Var0
Fun1 " -font " "$Font0"        # Richiamo funzione con 2 parametri
Font0=$Var0
Fun1 " -pointsize " "$AltCar0" # Richiamo funzione con 2 parametri
AltCar0=$Var0
Fun1 " -fill " "$ColCar0"      # Richiamo funzione con 2 parametri
ColCar0=$Var0
Fun1 " -stroke " "$ColBor0"    # Richiamo funzione con 2 parametri
ColBor0=$Var0
Fun1 " -strokewidth " "$DimBor0"   # Richiamo funzione con 2 parametri
DimBor0=$Var0
Fun1 " -gravity " "$PosTest0"  # Richiamo funzione con 2 parametri
PosTest0=$Var0
Testo0=" label:'"$Testo0"' " 
#
# Composizione riga di comando.
C1=`echo $Magick0 $Sf0 $ColCar0 $ColBor0 $DimBor0 $Font0 $AltCar0 $PosTest0 $Testo0 $Out0`; echo $C1; eval $C1 # Mostra ed esegue il comando contenuto nella variabile $C1
exit 0
Postare l'output di un comando significa inserire nel post: la riga in cui si digita il comando, tutto l'output, e la riga in cui il prompt ricompare.
Hardware e Sistema Operativo di Sargonsei: http://sargonsei.altervista.org/hardwar ... r-fisso-2/
Comandi da tenere a portata di mano: http://sargonsei.altervista.org/655-2/
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti