GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gibt es eine goto-Anweisung in bash?

Nein, da ist kein; siehe §3.2.4 "Compound Commands" im Bash Reference Manual für Informationen über die Kontrollstrukturen, die tun existieren. Beachten Sie insbesondere die Erwähnung von break und continue , die nicht so flexibel sind wie goto , sind aber in Bash flexibler als in einigen Sprachen und können Ihnen helfen, das zu erreichen, was Sie wollen. (Was auch immer Sie wollen ...)


Wenn Sie es verwenden, um einen Teil eines großen Skripts zum Debuggen zu überspringen (siehe Kommentar von Karl Nicoll), dann könnte false eine gute Option sein (nicht sicher, ob "false" immer verfügbar ist, für mich ist es in /bin/false) :

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

if false; then

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

fi

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

Die Schwierigkeit tritt auf, wenn es an der Zeit ist, Ihren Debugging-Code herauszureißen. Das Konstrukt "wenn falsch" ist ziemlich einfach und einprägsam, aber wie finden Sie das passende fi? Wenn Ihr Editor Ihnen erlaubt, den Einzug zu blockieren, können Sie den übersprungenen Block einrücken (dann möchten Sie ihn zurücksetzen, wenn Sie fertig sind). Oder ein Kommentar zur fi-Zeile, aber es müsste etwas sein, an das Sie sich erinnern werden, was, wie ich vermute, sehr programmiererabhängig sein wird.


Es kann in der Tat für einige Debug- oder Demonstrationszwecke nützlich sein.

Ich fand diese Lösung von 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

ergibt:

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

Linux
  1. Bash-Scripting:Wechsel vom Backtick-Operator zu $-Klammern

  2. Bash-If-Else-Anweisung mit Beispielen

  3. 4 Beispiele für Bash-If-Anweisungen ( If then fi, If then else fi, If elif else fi, Nested if )

  4. 5 Beispiele für Bash-Case-Anweisungen

  5. BASH:SIGTSTP-Signal senden (Strg+Z)

Bash if..else-Anweisung

Bash Shebang

Bash-Skripting – Case-Statement

So arbeiten Sie mit Case-Anweisungen in Bash-Skripten

Bash If Else Syntax mit Beispielen

Bash If Else und andere bedingte Anweisungen verstehen