作为初学者,我不确定这是否是进行多个循环的最佳方法!尽管它运行良好,但请建议我如果有一种优雅的方法(我不仅限于bash,但我不熟悉其他语言(
(#!/bin/bash
while :; do
read -n1 -e -p"Top Levels 1-5: " top_levels
if [ "$top_levels" == "1" ]; then
echo "top level 1"
elif [ "$top_levels" == "2" ]; then
while :; do
read -n1 -e -p"Sub Levels 1-5: " sub_levels
if [ "$sub_levels" == "1" ]; then
echo "sub level 1"
elif [ "$sub_levels" == "2" ]; then
echo "sub level 2"
elif [ "$sub_levels" == "3" ]; then
while :; do
read -n1 -e -p"Final Levels 1-5: " final_levels
if [ "$final_levels" == "1" ]; then
echo "Final level 1"
elif [ "$final_levels" == "2" ]; then
echo "Final level 2"
elif [ "$final_levels" == "3" ]; then
echo "Final level 3"
elif [ "$final_levels" == "4" ]; then
echo "Final level 4"
else
echo "bye"
break
fi
done
elif [ "$sub_levels" == "4" ]; then
echo "sub level 4"
else
echo "bye"
break
fi
done
elif [ "$top_levels" == "3" ]; then
echo "top level 3"
elif [ "$top_levels" == "4" ]; then
echo "top level 4"
else
echo "bye"
exit
fi
done
我会像这样写
#!/bin/bash
process_final_levels() {
while :; do
read -n1 -e -p"### Final Levels 1-5: " final_levels
case $final_levels in
1) echo "Final level 1";;
2) echo "Final level 2";;
3) echo "Final level 3";;
4) echo "Final level 4";;
*) echo "returning to sub levels"
break;;
esac
done
}
process_sub_levels() {
while :; do
read -n1 -e -p"# Sub Levels 1-5: " sub_levels
case "$sub_levels" in
1) echo "sub level 1" ;;
2) echo "sub level 2" ;;
3) process_final_levels;;
4) echo "sub level 4" ;;
*) echo "returning to top levels"
break;;
esac
done
}
while :; do
# get top levels to work with
read -n1 -e -p"Top Levels 1-5: " top_levels
case "$top_levels" in
1) echo "top level 1" ;;
2) process_sub_levels ;;
3) echo "top level 3" ;;
4) echo "top level 4" ;;
*) echo "Bye"
exit;;
esac
done
我更改了提示和退出的字符串,以使您在哪个级别上更加直观。我没有添加评论,b/c我不知道这是怎么回事。我功能化,b/c,任何需要修改,测试或维护的代码都应进行功能化。