unixshell编程-清单程序
下面的代码包含我的代码的add函数,根据它在简单的事情上需要满足的要求,这是我无法完成的 ->当输入书名和作者姓名时,它可以正常工作,但如果 ->现有标题和不同作者(不起作用)需要将输出设置为“已成功添加书名” 书已经存在,而不是显示] *我有一个txt文件,其中存储了一套书籍的详细信息列表(bookdb.txt) 有人能帮我解决这个问题吗unixshell编程-清单程序,shell,unix,inventory,Shell,Unix,Inventory,下面的代码包含我的代码的add函数,根据它在简单的事情上需要满足的要求,这是我无法完成的 ->当输入书名和作者姓名时,它可以正常工作,但如果 ->现有标题和不同作者(不起作用)需要将输出设置为“已成功添加书名” 书已经存在,而不是显示] *我有一个txt文件,其中存储了一套书籍的详细信息列表(bookdb.txt) 有人能帮我解决这个问题吗 function add_new_book { echo "1) add_new_book" echo -n "Title :" r
function add_new_book
{
echo "1) add_new_book"
echo -n "Title :"
read title
echo -n "Author :"
read author
echo -n "Price :"
read price
echo -n "Qty Available : "
read available
echo -n "Qty Sold : "
read sold
grep "$title" BookDB.txt >/dev/null 2>&1
rc=$?
if [[ "$rc" != 0 ]]; then
echo $title:$author:$price:$available:$sold >> BookDB.txt
echo $BookDB "New book title ' $title ' added successfully "
else
echo "The book $title already exists."
fi
}
因此,对于“唯一键”$title:$author,您应该
grep
:
grep "^$title:$author:" BookDB.txt >/dev/null 2>&1
if [ "$?" != "0" ]
then
echo $title:$author:$price:$available:$sold >> BookDB.txt
echo $BookDB "New book title ' $title ' added successfully "
else
echo "The book $title already exists."
fi
我不知道我是否理解你的问题是正确的。如果您希望在Title和Autor相同的情况下禁止重复,但允许相同Title和不同作者的组合,或者相反,我建议将grep命令更改为:
grep ".*$title.*$author" BookDB.txt >/dev/null 2>&1
只有在DB行中同时找到标题和作者时,该书才会被拒绝
someone@somwhere ~/test $ ./test.sh
1) add_new_book
Title :test
Author :aaa
Price :12
Qty Available : 12
Qty Sold : 12
New book title ' test ' added successfully
someone@somwhere ~/test $ ./test.sh
1) add_new_book
Title :test
Author :aaa
Price :12
Qty Available : 12
Qty Sold : 12
The book test already exists.
someone@somwhere ~/test $ ./test.sh
1) add_new_book
Title :test
Author :abc
Price :12
Qty Available : 12
Qty Sold : 12
New book title ' test ' added successfully
全部正确,但请注意
“*$title.*$author”
。此模式可能与不需要的键匹配。