如果条目已经存在,我怎么能错误输入?

时间:2015-10-28 18:35:49

标签: input count vi

我正在编写一个简单的程序来将联系人添加到名为“phonebook”的文件中,但是如果联系人已经存在,我希望它返回一个回声,说“(名字姓氏)已经存在”,而不是将其添加到文件中。到目前为止,我已经获得了添加用户的程序,但它不会返回该回显并且无论如何都会添加重复的条目。我该如何解决这个问题?

    #!/bin/bash
    # Check that 5 arguments are passed
    #

    if [ "$#" -ne 5 ]
    then
          echo
          echo "Usage: first_name last_name phone_no room_no building"
          echo
          exit 1
    fi

    first=$1
    last=$2
    phone=$3
    room=$4
    building=$5

    # Count the number of times the input name is in add_phonebook

    count=$( grep -i "^$last:$first:" add_phonebook | wc -l )

    #echo $count

    # Check that the name is in the phonebook

    if [ "$count" -eq 1 ]
       then
          echo
          echo "$first $last is already in the phonebook."
          echo
          exit 1
    fi

    # Add someone to the phone book
    #

    echo "$1        $2      $3      $4      $5" >> add_phonebook

    # Exit Successfully

    exit 0

2 个答案:

答案 0 :(得分:0)

一些事情:

在尝试grep之前应该检查add_phonebook文件是否存在,否则你会得到grep: add_phonebook: No such file or directory输出。

你的grep表达式与文件的格式不匹配。

您正在字段之间保存带空格的文件,但在名称之间使用冒号(:)进行搜索。您可以更新文件格式以使用冒号分隔字段,也可以更新grep表达式以搜索空间。此外,您保存名字last_name,但搜索last_name,first_name。

使用空格格式:

count=$( grep -i "^$last[[:space:]]\+$first[[:space:]]" add_phonebook | wc -l )

答案 1 :(得分:0)

从回显线,已用空格中移除了我的制表符分隔符,现在它可以正确计数