unixshell编程-清单程序

unixshell编程-清单程序,shell,unix,inventory,Shell,Unix,Inventory,下面的代码包含我的代码的add函数,根据它在简单的事情上需要满足的要求,这是我无法完成的 ->当输入书名和作者姓名时,它可以正常工作,但如果 ->现有标题和不同作者(不起作用)需要将输出设置为“已成功添加书名” 书已经存在,而不是显示] *我有一个txt文件,其中存储了一套书籍的详细信息列表(bookdb.txt) 有人能帮我解决这个问题吗 function add_new_book { echo "1) add_new_book" echo -n "Title :" r

下面的代码包含我的代码的add函数,根据它在简单的事情上需要满足的要求,这是我无法完成的 ->当输入书名和作者姓名时,它可以正常工作,但如果

->现有标题和不同作者(不起作用)需要将输出设置为“已成功添加书名” 书已经存在,而不是显示]

*我有一个txt文件,其中存储了一套书籍的详细信息列表(bookdb.txt)

有人能帮我解决这个问题吗

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”
。此模式可能与不需要的键匹配。