1
a=1

echo -n "Enter book id: "; read book_id;
while [ $a -eq 1 ]
do
a=$(awk '{ if($3 == "$book_id") print 1; else print 0}' exercise1_data.txt)
echo $a
if [ $a -eq 1 ]; then
echo -n "Please enter unique book id: "; read book_id
fi
done

我正在尝试检查用户输入的图书 ID 是否唯一。如果有任何“book_id”实例,我正在做的是检查文件“exercise1_data.txt”。将执行 while 循环,直到用户输入唯一的书本 ID。

我收到一个错误Too many arguments

4

1 回答 1

2

首先修复awk:

您需要将 shell 变量传递给awk使用该-v选项:

awk -v b_id="$book_id" '$3==b_id{print 1;exit}END{print 0}' exercise1_data.txt

另外,如果您$3==b_id应该找到匹配项。仅当我们到达文件末尾时(未找到匹配项)。print 1exitprint 0


其次是脚本:

$ cat file
book_1 orielly 100
book_2 wiley 101

脚本:

#!/bin/bash

a=1

while [ "$a" -eq 1 ]; do
    echo -n "Please enter unique book id: "
    read book_id
    let a=$(awk -v b_id="$book_id" '$3==b_id{print 1;exit}END{print 0}' file)
    echo "$a"
done

演示:

$ bash script.sh
Please enter unique book id: 100
1
Please enter unique book id: 101 
1
Please enter unique book id: 102
0

笔记:

  • 总是引用你的 shell 变量。

  • 您在书籍文件中使用空格作为字段分隔符,这将不灵活,即书籍标题、作者等都有空格。

于 2013-04-09T18:06:17.017 回答