Shell脚本永远挂起来自名为“read $ file”的文件的grepping

时间:2016-08-16 16:38:59

标签: bash shell syntax scripting

我有我的下面的shell脚本,它在文件中搜索一个字符串并返回计数。不知道为什么它会卡在中间。请任何人解释一下。

#!/bin/bash

read -p "Enter file to be searched: " $file
read -p "Enter the word you want to search for: " $word

count=$(grep -o "^${word}:" $file | wc -l)
echo "The count for `$word`: " $count

输出:

luckee@zarvis:~/scripts$ ./wordsearch.sh
Enter file to be searched: apple.txt
Enter the word you want to search for: apple
^C

1 个答案:

答案 0 :(得分:2)

read需要传递变量 name file,而非$file

#!/bin/bash

read -p "Enter file to be searched: " file
read -p "Enter the word you want to search for: " word

count=$(grep -o -e "$word" "$file" | wc -l)
echo "The count for $word: $count"

之前发生的事情是您的file变量为空,因此您的代码正在运行:

count=$(grep -o "^${word}:" | wc -l)

...没有指定输入,所以它将永远等待stdin。

顺便说一下 - 你不需要wc这个; grep可以使用-c参数(在GNU实现中也称为--count)自己发出计数器。如果您希望该计数器通过单词而不是行,可以使用tr将每个单词放在自己的行上:

count=$(tr '[[:space:]]' '\n' <"$file" | grep -c -e "$word")