Terminare l'esecuzione di uno script .sh

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
federicogalimberti
Prode Principiante
Messaggi: 77
Iscrizione: martedì 3 maggio 2022, 23:34

Terminare l'esecuzione di uno script .sh

Messaggio da federicogalimberti »

Ho questo codice:

Codice: Seleziona tutto

OPERAZIONE="1"
if [ "$OPERAZIONE" = "1" ]; then
    # operazione 1
    VERIFICA="no"
elif [ "$OPERAZIONE" = "2" ]; then
    # operazione 2
    VERIFICA="no"
elif [ "$OPERAZIONE" = "3" ]; then
    # operazione 3
    VERIFICA="no"
else
    # operazione 4
    VERIFICA="no"
fi
if [ "$VERIFICA" = "si" ]; then
 # esegui un'altra operazione...
fi
e vorrei trasformarlo in questo:

Codice: Seleziona tutto

OPERAZIONE="1"
if [ "$OPERAZIONE" = "1" ]; then
    # operazione 1
elif [ "$OPERAZIONE" = "2" ]; then
    # operazione 2
elif [ "$OPERAZIONE" = "3" ]; then
    # operazione 3
else
    # ferma tutto...
fi
# esegui un'altra operazione...
In pratica, permettete la grezzezza del mio linguaggio, vorrei il codice seguente fuori dal ciclo if:

Codice: Seleziona tutto

# esegui un'altra operazione...
E' possibile secondo voi?
Ho provato con 'exit' ma quando copio/incollo sulla shell il codice con OPERAZIONE="1000" non ritorno a:

Codice: Seleziona tutto

fede@Ubuntu-22:~/cartella-prova$ 
Avatar utente
neolight69
Prode Principiante
Messaggi: 60
Iscrizione: lunedì 19 giugno 2006, 11:06
Desktop: gnome-shell
Distribuzione: Ubuntu 22.04 i686
Contatti:

Re: Terminare l'esecuzione di uno script .sh

Messaggio da neolight69 »

Ho fatto semplicemente copia incolla del tuo esempio mettendo la exit nell'ultimo else e funziona perfettamente, forse non ho capito la tua domanda
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1109
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: Terminare l'esecuzione di uno script .sh

Messaggio da korda »

In ogni caso, rimanendo attinente al titolo della discussione, il Ctrl+C dovebbe sempre funzionare
Ultima modifica di korda il giovedì 29 settembre 2022, 15:47, modificato 1 volta in totale.
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
federicogalimberti
Prode Principiante
Messaggi: 77
Iscrizione: martedì 3 maggio 2022, 23:34

Re: Terminare l'esecuzione di uno script .sh

Messaggio da federicogalimberti »

A me si chiude la schell, ho riprovato ora, non ritorno alla linea di comando.
Avatar utente
neolight69
Prode Principiante
Messaggi: 60
Iscrizione: lunedì 19 giugno 2006, 11:06
Desktop: gnome-shell
Distribuzione: Ubuntu 22.04 i686
Contatti:

Re: Terminare l'esecuzione di uno script .sh

Messaggio da neolight69 »

puoi postare la riga di comando che usi per lanciare il tuo script?
federicogalimberti
Prode Principiante
Messaggi: 77
Iscrizione: martedì 3 maggio 2022, 23:34

Re: Terminare l'esecuzione di uno script .sh

Messaggio da federicogalimberti »

Non uso nessuna riga di comando, copio il contenuto del file .sh nella shell con il mouse.
Lucio C
Prode Principiante
Messaggi: 190
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Milano

Re: Terminare l'esecuzione di uno script .sh

Messaggio da Lucio C »

Ma quello non e' uno script, e' praticamente un source file !
Uno script e' un file che ha permesso di esecuzione e una shebang (p.es. #! /bin/csh -f ) nella prima riga che dice in che sottoprocesso (subshell) va fatta girare (potrebbe anche non essere uno shell, ma awk o perl, per dire). E si invoca per nome come ogni eseguibile, binario o meno.

Un source file non richiede permesso di esecuzione e a seconda degli shell si invoca con source nomefile o . nomefile (o con un alias). Viene eseguito nel processo di shell corrente, e ovviamente deve contenere i comandi dello shell in cui si e' (mentre nulla vieta di eseguire script sh da uno shell csh o viceversa).

L'esecuzione di comandi di shell "battuti a mano" (dattilografati direbbe qualcuno) e' di fatto la stessa cosa, e cosi' fare cut and paste.

Ovviamente tra script e source file c'e' una differenza fondamentale per quanto riguarda le variabili di environment. Si lascia da indovinare quale :devilmad:
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2516
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 20.04
Località: Palermo

Re: Terminare l'esecuzione di uno script .sh

Messaggio da rai »

ciao federicogalimberti
exit è un comando che quando viene eseguito fa uscire dalla shell in cui viene eseguito. Quando apri un terminale tu hai fatto login in una shell e in quella shell esegui tutti i comandi. Se lì esegui exit il sistema obbedientemente esce dalla shell e chiude il terminale.
Se nel terminale lanci il comando ./nomescript.sh il codice contenuto in nomescript.sh viene eseguito in una sua subshell. Se dentro nomescript.sh viene eseguito un exit la subshell dello script viene chiusa e si ritorna nella shell chiamante, nel terminale.
Per visualizzare la cosa può essere utile una variabile di ambiente che ci informa di quanti livelli siamo annidati nella shell

Nel terminale siamo nel primo livello di annidamento:

Codice: Seleziona tutto

~ $ echo $SHLVL
1
Invece se fai un file /tmp/prova.sh contente soltanto:

Codice: Seleziona tutto

echo ciao dal livello $SHLVL
Quando lo esegui nel terminale vedrai che quel file è eseguito in una subshell

Codice: Seleziona tutto

~ $ bash /tmp/prova.sh
ciao dal livello 2
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti