我有这个功能
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后,我需要在同一个功能中继续前进。
答案 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
分支;您会注意到,如果答案不是n
或y
,代码就会失败,而且此行为实际上也适用于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}
}