GNU/Linux >> Tutoriales Linux >  >> Linux

¿Hay una instrucción goto en bash?

No no hay; consulte §3.2.4 "Comandos compuestos" en el Manual de referencia de Bash para obtener información sobre las estructuras de control que hacen existir. En particular, tenga en cuenta la mención de break y continue , que no son tan flexibles como goto , pero son más flexibles en Bash que en algunos idiomas y pueden ayudarlo a lograr lo que desea. (Lo que sea que quieras...)


Si lo está utilizando para omitir parte de un script grande para la depuración (vea el comentario de Karl Nicoll), entonces si es falso podría ser una buena opción (no estoy seguro si "falso" siempre está disponible, para mí está en /bin/falso) :

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

if false; then

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

fi

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

La dificultad surge cuando llega el momento de extraer el código de depuración. La construcción "si es falso" es bastante sencilla y fácil de recordar, pero ¿cómo encuentras el fi coincidente? Si su editor le permite bloquear la sangría, puede sangrar el bloque omitido (luego querrá volver a colocarlo cuando haya terminado). O un comentario sobre la línea fi, pero tendría que ser algo que recordarás, lo que sospecho dependerá mucho del programador.


De hecho, puede ser útil para algunas necesidades de depuración o demostración.

Encontré esa solución de 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

da como resultado:

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

Linux
  1. Cómo usar la declaración condicional if else en Bash Script

  2. Declaración de Bash If-Else con ejemplos

  3. 4 Ejemplos de declaraciones If de Bash (If then fi, If then else fi, If elif else fi, Nested if)

  4. 5 ejemplos de declaraciones de casos Bash

  5. declaración Bash/sh 'if else'

Declaración de Bash if..else

Bash Shebang

Bash Scripting – Declaración de caso

Cómo trabajar con declaraciones de casos en scripts Bash

Sintaxis de Bash If Else con ejemplos

Comprender Bash If Else y otras declaraciones condicionales