GNU/Linux >> Linux Esercitazione >  >> Linux

C'è un'istruzione goto in bash?

No non c'è; vedere §3.2.4 "Comandi composti" nel Manuale di riferimento di Bash per informazioni sulle strutture di controllo che fanno esistere. In particolare, si noti la menzione di break e continue , che non sono flessibili come goto , ma sono più flessibili in Bash che in alcune lingue e possono aiutarti a ottenere ciò che desideri. (Qualunque cosa tu voglia...)


Se lo stai usando per saltare parte di uno script di grandi dimensioni per il debug (vedi il commento di Karl Nicoll), allora se false potrebbe essere una buona opzione (non sono sicuro che "false" sia sempre disponibile, per me è in /bin/false) :

# ... Code I want to run here ...

if false; then

# ... Code I want to skip here ...

fi

# ... I want to resume here ...

La difficoltà arriva quando è il momento di estrarre il codice di debug. Il costrutto "if false" è abbastanza semplice e facile da ricordare, ma come si fa a trovare il corrispondente fi? Se il tuo editor ti consente di bloccare il rientro, puoi indentare il blocco saltato (quindi ti consigliamo di rimetterlo quando hai finito). O un commento sulla riga fi, ma dovrebbe essere qualcosa che ricorderai, che sospetto dipenderà molto dal programmatore.


In effetti potrebbe essere utile per alcune esigenze di debug o dimostrazione.

Ho trovato la soluzione di Bob Copeland http://bobcopeland.com/blog/2012/10/goto-in-bash/ elegant:

#!/bin/bash
# include this boilerplate
function jumpto
{
    label=$1
    cmd=$(sed -n "/$label:/{:a;n;p;ba};" $0 | grep -v ':$')
    eval "$cmd"
    exit
}

start=${1:-"start"}

jumpto $start

start:
# your script goes here...
x=100
jumpto foo

mid:
x=101
echo "This is not printed!"

foo:
x=${x:-10}
echo x is $x

risulta in:

$ ./test.sh
x is 100
$ ./test.sh foo
x is 10
$ ./test.sh mid
This is not printed!
x is 101

Linux
  1. Come utilizzare l'istruzione if else condizionali nello script Bash

  2. Scripting Bash:passaggio dall'operatore backtick a $ parentesi

  3. 4 Esempi di istruzioni Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

  4. Bash/sh istruzione 'if else'

  5. Array Bash e pedici negativi, sì o no?

Bash if..else Statement

Bash Shebang

Bash Scripting – Case Statement

Come lavorare con l'istruzione Case negli script Bash

Bash If Else Sintassi con esempi

Comprendere Bash If Else e altre dichiarazioni condizionali