echo 3 statements based wc -l count number 在输出中返回

echo 3 statements based wc -l count number returned in output

团队,我的命令运行良好,但我正在增强它以获得如下结果

我的目标是用它报告计数和显示语句。

我要满足三个条件

1 - 如果结果 = 0 未找到安装

2 - 如果结果 = 1-64,则找到 64 以下的坐骑

3 - 如果结果 = 64+,则在 64 以上找到坐骑

如果计数为 0 我要输出:

0 mounts found on this hostname

如果找到 1-64 个坐骑,那么我想说找到任何数量

x mounts found on hostname.

如果发现超过64个坐骑,那我想说

x mounts found on hostname that are more than 64
mount | grep csi | grep -e /dev/sd | wc -l && echo "mounts found on $HOSTNAME" 

我正在尝试学习如何将返回的计数与 64 进行比较并相应地替换语句。我需要一个单行 shell 命令来完成所有这些而不是多个命令,因为我需要将它安装在 ansible shell 模块中。

示例输出:

mount | grep csi
tmpfs on /var/lib/kubelet/pods/abaa868f-2109-11ea-a1f8-ac1f6b5995dc/volumes/kubernetes.io~secret/csi-nodeplugin-token-type tmpfs (rw,relatime)
/host/dev/sdc on /var/lib/kubelet/pods/11ea-a1f8-ac1f6b5995dc/volumes/kubernetes.io~csi/ea6728b2-08d0-5fb7-b93a-5f63e49f770c/mount type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048,fsc,readahead=4096)
mount | grep csi | grep /dev/sd
/host/dev/sdc on /var/lib/kubelet/pods/11ea-a1f8-ac1f6b5995dc/volumes/kubernetes.io~csi/b93a-5f63e49f770c/mount type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048,fsc,readahead=4096)

任何提示为什么这在下面不起作用?

尝试过的解决方案:使用 awk 和比较运算符

mount | grep -Ec '/dev/sd.*\<csi' | awk '[=18=] = 0 { printf "No mounts found", [=18=],"TRUE" ; } ([=18=] > 0 && [=18=] <= 64)  { print "Mounts are less than 64", [=18=] ;} [=18=] > 64  { print "Mounts are more than 64", [=18=] ;}'

输出:

node1

预计:

node1 No mounts found

具有扩展和优化的管道:

mount | grep -Ec '/dev/sd.*\<csi' \
| awk '{ print [=10=],"mounts found on hostname"([=10=]>64? " that are more than 64." : ".") }'

grep-c选项——抑制正常输出;而是打印匹配行数

符号\<\>分别匹配词首和词尾的空串