我正在编写一个简单的程序来将联系人添加到名为“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
答案 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)
从回显线,已用空格中移除了我的制表符分隔符,现在它可以正确计数