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
答案 0 :(得分:2)
首先修复awk:
您需要使用awk
选项将shell变量传递给-v
:
awk -v b_id="$book_id" '$3==b_id{print 1;exit}END{print 0}' exercise1_data.txt
如果$3==b_id
print 1
,您应该exit
和print 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
演示:
{{1}}
注意:
始终引用您的shell变量。
您在书籍文件中使用空格作为字段分隔符,这将不灵活,即书籍标题,作者等都具有空格。