0

所以我有一个必须为课堂编写的库脚本。它有几个功能,例如addbook,deletebook,checkout等。问题出在我的结帐功能上。

colin@Colins-Samsung:~$ bash --version GNU bash,版本 4.2.45(1)-release (x86_64-pc-linux-gnu) 版权所有 (C) 2011 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本3 或更高版本http://gnu.org/licenses/gpl.html

所以首先这是我的字符串(用逗号分隔的字段)

表格书,作者,图书馆,日期

string= Unix for programmers,Graham Glass,mylibrary,11-11-13

我已经在前几行代码中声明了我的标题、库和日期,但是当我尝试声明作者时,我使用这行代码

author=`awk -F, '/'$title'/ {print $2}' $library`

我相信这是我的问题所在

字符串最终发生的事情是作者变为空,所以在我的函数完成后,字符串现在是

 Unix for programmers,,mylibrary,11-11-13

因此,这行代码中似乎发生了一些事情: '/'$title'/ {print $2}' 我的问题是什么?

我试过了

author=`awk -F, "/'$title'/ {print $2}" $library`

我也试过##

author=`egrep "$title" $library | awk -F, '{print $2}' $library`

但是在这两个帐户上,我都会遇到一些错误,要么是失控的正则表达式,要么是无效的命令。

这是我要修复的整个功能

checkout(){

echo please enter your username 
read username
uCount=`egrep "$username" $library | wc -l`
if (( $uCount >=3 ))
then 
    echo "Sorry, you can only have 3 books checked out at a time"
else 
    echo "what is the name of the book you would like to check out?"
    read title
    exists=`egrep "$title" $library | wc -l`
    if (( $exists == 0 ))
    then 
        echo "Sorry, but this book does not exist"
    else 

    author=`awk -F, '/'$title'/ {print $2}' $library`

    ##author=`egrep "$title" $library | awk -F, '{print $2}' $library`
    ##author=`awk -F, "/'$title'/ {print $2}" $library`
    ##String = unix,graham glass,mylib,11-11-13

    updated=$title,$author,$username,`date +%F`
    sed -e "/$title/d" $library > $tmp
    echo $updated >> $tmp
    mv $tmp $library
    echo "$title succesfully checked out"
    fi
fi

请指教。提前感谢您的帮助

4

2 回答 2

2

要将变量添加到 awk 中,请这样做。

awk -v var="$variable" '{$0=var}' file

或者

awk '{$0=var}' var="$variable" file

所以这:

author=`awk -F, '/'$title'/ {print $2}' $library`

应该是这样的

author=$(awk -F, '$0~var {print $2}' var="$title" $library)

PS最好使用括号var=$(code) 比较回抽动

于 2013-11-11T21:46:55.867 回答
0

您的脚本中有很多 shell 错误,对于各种输入和数据值,它可能会以多种方式失败。你也有逻辑问题。想象一下,如果一个叫你的人Theo想使用你的图书馆,而你的图书馆里有 3 本书的标题包含这个词,会发生Theory什么?可怜的老西奥永远借不到书!

外壳是调用工具的环境。它具有编程结构,可帮助您对工具的调用进行排序。就这些。您不应该尝试使用 shell 构造来解析文本文件——这就是 awk 的发明目的,因此它非常擅长。

如果您需要帮助正确编写此内容,请告诉我们。

于 2013-11-11T23:31:36.570 回答