Bash脚本-在case结构或if-else语句中不执行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

我有一个$empIc,它是用户输入的变量。我尝试从文本文件中读取一些详细信息,并检查变量$ic。如果输入不匹配,将执行脚本文件invalidic,让用户选择重新输入输入或返回菜单。但是,invalidic脚本中的read命令从未执行,并导致无限循环

 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