Linux CASE语句后继续函数
我有这个功能Linux CASE语句后继续函数,linux,bash,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 } 我该怎么做?在选择“是”之后,我需要在相同的函数中继续前进。这非常不清楚,但我想你的意思是
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
}
我该怎么做?在选择“是”之后,我需要在相同的函数中继续前进。这非常不清楚,但我想你的意思是
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
严格地说,第一个
案例
只需要一个n
分支;您会注意到,如果答案不是n
或y
,那么代码就是失败的,而这种行为实际上也适用于y
案例。如果不是这种情况,则是最终的*)
大小写可以用来处理所有未处理的值。这一点非常不清楚,但我想你的意思是
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
严格地说,第一个
案例
只需要一个n
分支;您会注意到,如果答案不是n
或y
,那么代码就是失败的,而这种行为实际上也适用于y
案例。如果不是这种情况,则是最终的*)
case可用于处理所有未处理的值。如果您只关心其中一个分支,我不会使用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}
}
当您只关心其中一个分支时,我不会使用
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}
}
true
可以,或者它的等价物(当清楚退出状态实际上并不重要时,通常使用):
.BTW,如果您只想中止函数,而不是退出整个shell,那么您可能需要返回
而不是退出
。(您可能会考虑使用现代POSIX函数声明语法--doit(){
,没有前面的函数
——而不是支持向后兼容的古老ksh语法;请参阅;这样,您的代码将与基线POSIX shell(如ash/dash/等)一起工作,并且对于那些希望函数
关键字在默认情况下使变量成为局部变量的老ksh用户来说,您的代码就不会那么让人困惑了,因为它没有这样做t在bash中)@CharlesDuffy很好,谢谢,return
技巧在另一个函数上确实帮助了我:)true;
就可以了,或者它的等价物(当退出状态显然并不重要时,通常使用):;
。顺便说一句,如果您只想中止函数,而不是退出整个shell,那么您可能需要返回而不是退出{
,没有前面的函数
——而不是支持向后兼容的古老ksh语法;请参阅;这样,您的代码将与基线POSIX shell(如ash/dash/等)一起工作,并且对于那些希望函数
关键字在默认情况下使变量成为局部变量的老ksh用户来说,您的代码就不会那么让人困惑了,因为它没有这样做t in bash)@CharlesDuffy好的,谢谢,那return
技巧真的在另一个功能上帮了我的忙:)好的,一切都正常:)非常感谢你的朋友!!好的,一切都正常:)非常感谢你的朋友!!可能[$ans=[yY]*]| | return 1
更安全……虽然如果没有使用其他扩展,case
语句在可移植性方面肯定领先。可能[[$ans=[yY]*]| | return 1
更安全……尽管case
语句在可移植性方面肯定领先,如果没有使用其他扩展。