2017-11-26 2 views
0

Ich bin völlig neu im Bash-Scripting. Ich frage mich, ob es eine Möglichkeit gibt, dass ich eine Referenz für den folgenden Codeblock zu erstellen:Neu im Bash-Scripting - ich möchte, dass ein Codeblock viele Male über Referenz ausgeführt wird

read -t5 -n1 -r -p 'Press any key or wait five seconds...' key 
if [ "$?" -eq "0" ]; then 
    echo 'A key was pressed.' 
else 
    echo 'Five seconds passed. Continuing...' 
fi 

Gibt es eine Weise, die ich diesem Codeblock einen Bezugspunkt geben kann, und führen sie den Verweis mehrmals während der Verwendung Rest des Skripts?

Wäre es einfacher/besser, ein separates Skript mit diesem speziellen Code zu erstellen und dann im Rest des Skripts, das ich mit include schreibe, darauf zu verweisen? z.B. Bash: How _best_ to include other scripts?

Danke!

+2

Suchen Sie eine Funktion? 'foo() {cmds; } ' –

+1

Sie können auch den Exit-Status-Test vereinfachen (beachten Sie, dass' ['ist eigentlich ein Befehl und' if' testet seinen Exit-Code): 'if read -t5 ...; dann echo Taste gedrückt; sonst Echo Timeout; fi'. – randomir

+0

Tangential, beachten Sie, dass der eigentliche Zweck von "if" darin besteht, einen Befehl auszuführen und seinen Beendigungscode zu untersuchen. Mit anderen Worten, cmd; wenn ["$?" = "0"]; dann ... 'ist idiomatisch und elegant geschrieben' if cmd; dann ... ' – tripleee

Antwort

4

Ja, es gibt einen Weg, dies zu tun: Machen Sie es zu einer Funktion.

ReadKey() { 
    read -t5 -n1 -r -p 'Press any key or wait five seconds...' key 
    if [ "$?" -eq "0" ]; then 
     echo 'A key was pressed.' 
    else 
     echo 'Five seconds passed. Continuing...' 
    fi 
} 

Und dann rufen:

ReadKey 
+0

Süß, das sieht gut aus. Ich werde es versuchen! Vielen Dank! – AveryFreeman

+0

@AveryFreeman Wenn die Antwort das Problem löst, markieren Sie sie als akzeptierte Antwort. – sjsam

+0

Sorry, mir war nicht klar, wo ich zuerst klicken soll. Vielen Dank :) – AveryFreeman

Verwandte Themen