CASE语句后继续运行

时间:2018-04-08 18:29:42

标签: linux bash

我有这个功能

function doit {
  echo " Do you want to continue? {y/n} "
  case $opt in
    y) ??????
    n) exit ;;
  esac
  echo " 32b or 64b? {32/64} "
  case $opt in
    32) do32 ;;
    64) do64 ;;
  esac
}

如何使这项工作?选择YES后,我需要在同一个功能中继续前进。

2 个答案:

答案 0 :(得分:2)

这是非常不清楚的,但我想你的意思是

doit () {
   read -p " Do you want to continue? {y/n} " opt
   case $opt in
     y) ;;
     n) return 1 ;;
   esac
   read -p " 32b or 64b? {32/64} " opt
   case $opt in
    32) do32 ;;
    64) do64 ;;
   esac
}

y案例中根本不做任何事情的选项似乎是你问题的答案。但是请注意使用return而不是exit来保留函数,函数声明中缺少function关键字(这只是一个偏好的问题;但我看到了没有Bash-only语法变体的优点,并且使用read来读取输入(我这就是你想要的?)。 return参数1表示调用者失败,因此您可以说例如。

doit || echo "$0: doit failed or aborted" >&2

严格来说,第一个case只需要一个n分支;您会注意到,如果答案不是ny,代码就会失败,而且此行为实际上也适用于y案例。如果不是这种情况,最终的*)案例可用于处理所有其他未处理的值。

答案 1 :(得分:2)

当你只关心其中一个分支时,我不会使用case语句:

function doit {
    read -p " Do you want to continue? {y/n} " ans
    [[ $ans == [nN]* ]] && return 1

    PS3=" 32b or 64b? "
    select size in 32 64; do
        case $size in
            32|64) break ;;
        esac
    done
    do${size}
}