【发布时间】:2012-01-26 13:37:31
【问题描述】:
我正在为我的程序设计一个选项,它应该像这样工作:
- 用户输入标题
- 用户输入作者
- 然后系统会在名为 BookDB.txt 的文本文件中检查用户的标题和作者输入
- 如果文本文件中已有记录,系统会提示错误
- 否则它将继续用户输入价格、可用数量和销售数量。
- 随后将添加图书
我尝试使用 grep 但无济于事。 以下是我针对此特定功能的代码。
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
更新问题: 在这种情况下,即使我输入“Catch Me If You Can”作为标题+“Ubuntu Team”作为作者,它也会引发错误。如何修改代码以便逐行检查?
提前感谢那些帮助过的人! :)
【问题讨论】:
-
请详细说明“无用”部分。
-
错误信息应该发送到 stderr: echo "Error!" >&2
-
错误信息现在有效。现在归结为检查文件中的每一行是否有任何现有的标题+作者记录。
-
Agrajag 的回答解释了“更新的问题”(见第二个问题),他的解决方案没有这个问题。它是在您编辑问题之前编写的。
标签: linux bash function shell grep