用于检查文件系统安装和测试以检查文件路径的 Grep 提供了不正确的信息

用于检查文件系统安装和测试以检查文件路径的 Grep 提供了不正确的信息

即使该路径存在,该脚本也会报告它不存在。逻辑上有什么缺陷?

#!/bin/bash
mount="/fileserver"

if grep -qs "$mount" /proc/mount && { test -d '/fileserver/subdirectory'; } then
 echo "Both the mount and path exist."
else grep -qs "$mount" /proc/mount ! && { test -d '/fileserver/subdirectory'; }
 echo "mount exists, but path does not."
fi

答案1

这个想法是完全正确的,但是与 一起使用的否定运算符&&完全在错误的位置,它需要与test运算符一起使用。

根据您的命令,if条件的第一部分的评估如下,

grep -qs "$mount" /proc/mount !

其中否定运算符被视为另一个文件来搜索,这grep会导致grep: !: No such file or directory,但由于文件不存在 ( -s) 上的错误抑制标志,错误不会显示在终端中。

此外,{..}只要您有一个命令,就不需要复合运算符。您只需要执行以下操作:

if grep -qs "$mount" /proc/mount &&  test -d "/fileserver/subdirectory";  then
    echo "Both the mount and path exist."
else grep -qs "$mount" /proc/mount && ! test -d "/fileserver/subdirectory"; then
    echo "mount exists, but path does not."
fi

grep也就是说,在断言脚本正在运行之前,您不需要立即静默输出。尝试在不带-qs标志的情况下运行它以添加调试步骤。


您还可以使用挂载点(1)工具来自实用程序Linux使用它可以直接检查路径是否已安装的包

if mountpath -q "/fileserver/subdirectory"; then

相关内容