我正在使用Pashua处理对话框的BASH shell脚本。现在我遇到了一个结构问题:我的主要功能是从一个获取用户输入的对话框开始。然后它调用一个函数来测试这个输入。如果结果令人满意,则没有任何事情发生,主要继如果不是,则测试函数返回错误并再次调用main,以便用户可以正确执行此操作。 这导致在调用测试函数之后主要部分运行两次(或甚至更多)。这是不可取的,但可以理解。
示例:
main () {
...do some dialog stuff...
test_function
...do some more interesting stuff...
}
test_function () {
if [ ...something doesnt fit... ]
then
echo "lets try this again!"
main
fi
}
main
那么,我怎样才能阻止脚本执行 ...更有趣的东西... 多一次呢?就像突破主力并再次开始主力?
谢谢!
答案 0 :(得分:2)
放弃递归 它不属于这种情况。
main () {
while ! read_input; do
echo "lets try this again!"
done
...do some more interesting stuff...
}
read_input () {
...do some dialog stuff...
[[ ...something doesnt fit... ]] && return 1 || return 0
}
main
答案 1 :(得分:0)
在对话框代码上使用循环,并在需要时不跳过第一次迭代:
main () {
local first=1
while [[ $first ]] || test_function ; do
dialog_stuff
unset first
done
}
test_function () {
if [ ... ] ; then
return 1
fi
return
}
答案 2 :(得分:0)
main () {
while do_some_dialog_stuff; do
test_function && break
done
...do some more interesting stuff...
}
do_some_dialog_stuff() {
...do some dialog stuff...
return 0
}
test_function () {
if [ ...something doesnt fit... ]
then
echo "lets try this again!" >&2
return 1
fi
}
main
答案 3 :(得分:0)
我将输入内容和测试内容放在一起,这样您就可以使用一个函数返回整体状态。这是有道理的,因为你总是想在输入之后运行测试内容。
然后,您可以在单个函数上运行循环。在等待某些事情是正确的时候,我发现until
比while !
更具可读性。
main (){
until test_function; do
continue
done
}
test_function () {
... do some dialogue stuff ...
if [ ...something doesnt fit... ]
then
echo "lets try this again!" >&2
return 1
fi
}