Есть 3 проблемы с вашим кодом.
Во-первых, опция x для grep заставляет его совпадать только с полными строками, а поскольку вы помещаете автора и заголовок в одну строку, это не будет совпадать.
При использовании опции x «Gaiman» не соответствует «Gaiman: Nation: $ 20», если вы удалите x из опций grep, это будет работать.
Вторая проблема заключается в том, что эти две команды не зависят друг от друга. Таким образом, если у вас есть книга под названием «Нация» и книга «Гайман», она будет считаться совпадением, даже если у вас есть книга «Нация» «Богатство народов», а у вас есть книга Гайман ». Anansi Boys '.
Третья проблема заключается в том, что grep найдет частичные совпадения. Если вы попытаетесь ввести книгу «Это», то 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
}
Предполагается, что ':' не может встречаться в именах авторов или именах книг.