Shell脚本逐行读取文件并与变量进行比较

时间:2016-01-17 05:40:30

标签: bash shell unix

我有一个名为emp.txt的文件,其中包含empname列和empid列。现在我想要读取文件empnameempid,并与变量empname&用户在登录时输入了empid。如果两者都匹配,则应登录,否则显示消息>login invALID

以下是我的档案emp.txt

empname    empid**
aruna       sm223
santhosha   sm224
chandan     sm456

我写了一个函数,无论上面提到什么都没有。以下是我的功能。

function user () { 
  echo
  echo -e "Enter Your Name : \c"
  read usrname
  echo
  echo -e "Enter Your Employee-id : \c"
  read empid
  if [ "$usrname" = "" ] || [ "$empid" = "" ]; then 
    echo 
    echo " Please enter your name & empid."
    user
  fi
}

1 个答案:

答案 0 :(得分:1)

您不需要function ();只有()更便携。

您可以使用

代替echo "Enter your name"; read
read -p "Enter your name: " usrname

现在,在您的功能结束时,您同时拥有usrnameempid。要遍历您的文件并检查它们是否与现有条目匹配,您可以使用

read -p "Name: " usrname
read -p "ID: " empid
while read -r user_entry empid_entry; do
    if [[ $user_entry = $usrname && $empid_entry = $empid ]]; then
        echo "Logging in"
        exit    # Or return from function
    fi
done < emp.txt
echo "Login invalid"

这是跳过你的有效性检查,它只是为了展示如何遍历文件。一旦名称和ID匹配,我们必须在其他地方分支;如果我们到达循环的末尾,则认为尝试失败。

要确保empnameempid**列名称不被接受为用户名,您可以将< emp.txt替换为< <(tail -n +2 emp.txt),跳过第一行

这适用于Bash 4.3。