即使该路径存在,该脚本也会报告它不存在。逻辑上有什么缺陷?
#!/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