Есть ли "Goto" в сценариях UNIX KSH? - PullRequest
2 голосов
/ 01 августа 2011

Есть ли в KSH способ выйти из оператора case и перейти к определенной строке для следующего выполнения с кодом? Или есть ярлыки goto, которые вы можете использовать? Что-нибудь подобное использовалось вместо вложенных тонн ветвления?

Ответы [ 3 ]

3 голосов
/ 01 августа 2011

Хотя это всегда помогает опубликовать упрощенный пример вашей проблемы (но он охватывает все непредвиденные обстоятельства, которые вы ожидаете), учитывая ответ на ваш комментарий на Mark Read, вы можете заключить приглашение для ввода в цикл while, например

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
# ....

Кроме того, я согласен с Марком, без ярлыков или переходов в ksh.

Надеюсь, это поможет.

2 голосов
/ 01 августа 2011

Нет ярлыков или перехода.Однако вы можете выйти из глубоко вложенного цикла, передав число во встроенную функцию «break»: break 2 для выхода из двух уровней, break 3 для выхода из трех уровней и т. Д.

0 голосов
/ 22 сентября 2017

Существует реализация bash goto, если вы хотите адаптировать ее к ksh (пока нет)

#!/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
...