Bash脚本-在case结构或if-else语句中不执行read命令
我有一个$empIc,它是用户输入的变量。我尝试从文本文件中读取一些详细信息,并检查变量$ic。如果输入不匹配,将执行脚本文件invalidic,让用户选择重新输入输入或返回菜单。但是,invalidic脚本中的read命令从未执行,并导致无限循环Bash脚本-在case结构或if-else语句中不执行read命令,bash,ubuntu,Bash,Ubuntu,我有一个$empIc,它是用户输入的变量。我尝试从文本文件中读取一些详细信息,并检查变量$ic。如果输入不匹配,将执行脚本文件invalidic,让用户选择重新输入输入或返回菜单。但是,invalidic脚本中的read命令从未执行,并导致无限循环 while IFS=':' read -r dep ic name phone email gender birthDate jobTitle joinDate do if [ "$empIc" = "$ic&q
while IFS=':' read -r dep ic name phone email gender birthDate jobTitle joinDate
do
if [ "$empIc" = "$ic" ]
then
echo -n "Employee Name : $name"; echo
echo -n "Job Title : $jobTitle"; echo
echo -n "Department : $dep"; echo
break
else
match=0
fi
case $match in
0) echo "No such record!"; ./invalidic; break;;
*)
esac
done <Employee.txt
直接的问题是,
无效
在中运行,而。。。阅读完成直接的问题是无效的在中运行,而。。。阅读尝试将/invalidic
替换为/invalidic@zhongyi:您如何知道invalidic
中的读取
未执行?您应该看到echo
语句的输出,而读取操作会消耗Employee.txt
中的下一行,因为这是此时的标准输入,而且Employee.txt可能不包含只有1
或2
的行,您应该会看到请输入…
消息,循环将重新启动。然而,这并不是无休止地进行的,而是直到Employee.txt耗尽为止。然后程序应该终止。尝试将/invalidic
替换为/invalidic@zhongyi:您如何知道invalidic
中的读取
未执行?您应该看到echo
语句的输出,而读取操作会消耗Employee.txt
中的下一行,因为这是此时的标准输入,而且Employee.txt可能不包含只有1
或2
的行,您应该会看到请输入…
消息,循环将重新启动。然而,这并不是无休止地进行的,而是直到Employee.txt耗尽为止。然后程序应该终止。将case$match语句移出while循环有效,谢谢您的回答!将case结构更改为if语句也很有效。将case$match语句移出while循环也很有效,谢谢您的回答!将case结构更改为if语句也很有效。
#!/bin/bash
while true
do
echo "========================================="
echo "1. Enter Performance Review again"
echo "2. Back to Human Resource Management Menu"
echo "========================================="
echo "What would you like to do? Please enter choice in number: "; read action
case $action in
1) ./task4_main; break;;
2) ./task1_menu; break;;
*) echo "Please enter 1 for Performance Review, 2 to back to Human Resource Management Menu"
esac
done
match=0 # No match found *yet*, because we haven't started looking
while IFS=':' read -r dep ic name phone email gender birthDate jobTitle joinDate
do
if [ "$empIc" = "$ic" ]
then
echo "Employee Name : $name" # Don't use `echo -n`, then `echo` to add a newline. Just skip the -n
echo "Job Title : $jobTitle"
echo "Department : $dep"
match=1 # Found a match
break
fi
done <Employee.txt
# If we *still* haven't found a match (now that we've now scanned the
# entire file) then there isn't a match there.
case $match in
0) echo "No such record!"; ./invalidic;;
*)
esac