UNIX KSH脚本中是否有“Goto”?

时间:2011-07-31 23:45:00

标签: linux unix shell ksh

在KSH中是否有办法退出case语句并使用代码转到某行以进行下一次执行?或者你可以使用goto标签吗?这样的东西用来代替嵌套大量的分支?

3 个答案:

答案 0 :(得分:3)

虽然发布问题的简化示例总是有帮助的(但这涵盖了您期望的所有意外情况),但鉴于您对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
# ....

另外,我同意Mark,ksh中没有标签或者搞砸。

我希望这会有所帮助。

答案 1 :(得分:2)

没有标签或转到。但是,您可以通过将数字传递给内置的“break”来退出深度嵌套的循环:break 2退出两个级别,break 3退出三个级别等等。

答案 2 :(得分:0)

有一个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