根据文本文件中的单词检查用户input

我正在为我的程序工作,它应该像这样工作:

  1. 用户input标题
  2. 用户input作者
  3. 系统然后在名为BookDB.txt的文本文件中检查用户的标题和作者input
  4. 如果文本文件中已有logging,系统会提示错误
  5. 否则将继续用户input价格,可用数量和销售数量。
  6. 书将被添加

我尝试玩grep,但无济于事。 以下是我对这个特定function的代码。

function fnAddBook() { echo "Title: " read inputTitle echo "Author: " read inputAuthor if grep -Fq "$inputTitle" BookDB.txt; then if grep -Fq "$inputAuthor" BookDB.txt; then echo "Error!" fi else echo "Price: " read inputPrice echo "$inputTitle:$inputAuthor:$inputPrice" >> BookDB.txt echo "New Book successfully added!" fi } 

内容的BookDB.txt格式的内容| 标题:作者:价格:QtyAvail:QtySold

 Hello World:Andre:10.50:10:5 Three Little Pig:Andrew Lim:89.10:290:189 All About Ubuntu:Ubuntu Team:76.00:55:133 Catch Me If You Can:Mary Ann:23.60:6:2 Happy Day:Mary Ann:12.99:197:101 

更新的问题:在这种情况下,即使我input了“如果可以的话可以”作为标题+“Ubuntu Team”作为作者,也会引发错误。 我怎样才能修改代码,以便逐行检查?

预先感谢那些帮助! 🙂

你的代码有3个问题。

首先是grep的x选项使它只匹配完整的行,并且由于您将作者和标题放在同一行上,所以这不匹配。

与x选项“盖曼”不匹配“盖曼:民族:$ 20”,如果你从grep选项中删除x,这将工作。

第二个问题是两个问题是彼此独立的。 因此,如果你有一本名为“民族”的书和一本由“盖曼”出版的书,那么即使你所拥有的“国家”一书是“国富”,而盖曼书也是“ Anansi男孩'。

第三个问题是grep会找到部分匹配。 如果你试图输入“It”这个书,那么grep会在数据库中得出结论,因为“它来自沙漠”是。

你需要一个哨兵价值来描述标题来解决这个问题。 (哨兵必须是书名或作者姓名中不能存在的一些字符)

 function fnAddBook() { echo "Title: " read inputTitle echo "Author: " read inputAuthor if grep -Fq "$inputTitle:inputAuthor:" BookDB.txt then echo "Error!" else echo "Price: " read inputPrice echo "$inputTitle:$inputAuthor:$inputPrice" >> BookDB.txt echo "New Book successfully added!" fi } 

这假定':'不能出现在作者名或书名中。