bash - bash:不读取 if..elif 语句中的 else 语句
问题描述
我有以下脚本尝试使用 if..elif..else 语句创建菜单。但是,我的脚本永远不会在外部 while 循环中运行 else 语句,而它在内部 while 循环中工作?它应该回显“再试一次!” 按下菜单中未提及但退出循环的任何键的语句。它应该只打破循环并在按下“X”键时退出。
#!/bin/bash
while [[ 1 ]]; do
echo 1: menu1
echo 2: menu2
echo 3: menu3
echo X: exit
echo -n enter: ; read menu
if [[ ${menu} -eq 1 ]]; then
echo menu1
echo do something in menu1
elif [[ ${menu} -eq 2 ]]; then
echo menu2
echo do something in menu2
elif [[ ${menu} -eq 3 ]]; then
while [[ 1 ]]; do
echo 11: second menu1
echo 12: second menu2
echo 13: exit
echo -n enter number: ; read second_menu
if [[ ${second_menu} -eq 11 ]]; then
echo do something in second menu1
elif [[ ${second_menu} -eq 12 ]]; then
echo do something in second menu2
elif [[ ${second_menu} -eq 13 ]]; then
break
else
echo try again second_menu!
fi
done
elif [[ ${menu} -eq 'x' ]] || [[ ${menu} -eq 'X' ]]; then
break
else
echo try again menu!
fi
done
解决方案
[[
行为不端。认为这[[ k -eq x ]]
是真的,因为 -eq 是一个整数比较,并且这两个字符串都计算为整数 0。(我说它的行为不好,因为这里的良好行为会产生错误消息。)
使用=
or 一个 case 语句 ortest
代替[[
. (个人观点,完全避免[[
。它缺少错误信息是一种讽刺,使其完全无法使用。)
推荐阅读
- json - 消费函数并发送到单元格
- php - Wordpress 页面 - 结合 firebase auth 和 firestore PHP
- javascript - 无法在组件内渲染组件
- python - Django Generic Relations - ** 类型的对象不是 JSON 可序列化的
- c - SDL2 libSDL2_image.so:未定义的引用
- graphviz - DOT:如何将集群放置在同一级别而不对这些集群中的节点进行同等排名?
- r - Simmer for R 中的资源池 - 如何正确使用 get_server_count
- python - 访问和比较两列中的数据
- c - 无法更新指针值
- android - 按下触发的屏幕事件时,逐渐用颜色填充屏幕