微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – grep语句在case语句中不起作用

我想创建一个接受元音的shell脚本,并在文本文件“abc.txt”中打印该元音的出现次数.

以下脚本工作正常(用于在文本文件“abc.txt”中打印元音“a”的出现次数的脚本):

#!/bin/bash
grep -o [aA] abc.txt|wc -l

但是我想为所有的元音实现这个,所以我这样做了:

#!/bin/bash
echo -n "Enter the desired vowel: "
read ch
case ch in
a) grep -o [aA] abc.txt|wc -l;;
A) grep -o [aA] abc.txt|wc -l;;
e) grep -o [eE] abc.txt|wc -l;;
.
.
.
U) grep -o [uU] abc.txt|wc -l;;
esac

代码执行但在我输入所需的元音后没有显示任何内容.我也尝试了这个(但结果与上面的代码相同):

#!/bin/bash
x=0
echo -n "Enter the desired vowel: "
read ch
case ch in
a) x=grep -o [aA] abc.txt|wc -l;echo $x;;
A) x=grep -o [aA] abc.txt|wc -l;echo $x;;
e) x=grep -o [eE] abc.txt|wc -l;echo $x;;
.
.
.
U) x=grep -o [uU] abc.txt|wc -l;echo $x;;
esac

当我把它们放在case语句中时,我很遗憾为什么grep语句没有显示任何内容.

解决方法:

多个问题,但主要导致您的问题的问题是在case结构中没有使用变量.使用ch只是一个常量,与下面的任何表达式都不匹配.

case "$ch" in
#    ^^^^^ This needs to be a variable used in read command

此外,要存储命令的输出,您需要使用$(cmd)类型的命令替换语法.而不是grep .. | wc -l你可以使用-c标志来返回匹配字符串的总数.

x=$(grep -oc '[aA]' abc.txt); echo "$x"

(或)一个甚至改进的grep命令将启用与-i标志不区分大小写的匹配

x=$(grep -oci 'a' abc.txt); echo "$x"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐