/ / Czy są "Goto" w skrypcie UNIX KSH? - linux, unix, shell, ksh

Czy istnieją "Goto" w skrypcie UNIX KSH? - linux, unix, shell, ksh

Czy istnieje sposób, aby KSH opuścił skrzynię?oświadczenie i przejść do pewnej linii do następnego wykonania z kodem? A może masz etykiety goto? Coś takiego jak to używane zamiast gniazdowania ton rozgałęzień?

Odpowiedzi:

2 dla odpowiedzi № 1

Nie ma etykiet ani goto. Możesz jednak wyjść z głęboko zagnieżdżonej pętli, przekazując liczbę do wbudowanego "break": break 2, aby wyjść z dwóch poziomów, przerwać 3, aby wyjść z trzech poziomów itd.


3 dla odpowiedzi № 2

Chociaż zawsze pomaga opublikować uproszczonyprzykład twojego problemu (ale który obejmuje wszystkie nieprzewidziane sytuacje), biorąc pod uwagę odpowiedź na komentarz do Mark Read, możesz zawijać zapytanie o wejście do pętli while, np.

while ${keepTrying:-true} ; do
echo "enter Yes or No"
read yOrN
case "${yOrN} in
[Yy]* )
# do something
keepTrying=false
;;
[Nn]* )
# do something else
keepTrying=false
;;
* )
echo "bad input"
;;
esac
done

# continue with script
# ....

Zgadzam się również z Markiem, bez etykiet i gotów w ksh.

Mam nadzieję, że to pomoże.


0 dla odpowiedzi № 3

Istnieje implementacja bash goto, jeśli chcesz ją zaadaptować do ksh (do tej pory nie byłem)

#!/bin/bash

function gowto
{
label=$1
# works in Linux bash, but barks in ksh
cmd=$(sed -n "/#$label:/{:a;n;p;ba};" $0 | grep -v ":$")
#
eval "$cmd"
exit
}

echo step 1

gowto skip

echo To be skippped

#skip:

echo Step 2