我有我的下面的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
答案 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")