如何在ShellScript中查找目录是否为装载

use*_*553 1 unix linux

我需要查找某个位置是否是目录,以及它是否是ShellScript中的装载

我试过这个:

new_dir="/home/fruits/apple"
if [ -d "$new_dir" ]
then
    if [ mountpoint -q "$new_dir" ]
    then
        echo "directory is mounted"
    else
        echo "directory is not mounted"
    fi
fi
Run Code Online (Sandbox Code Playgroud)

但它没有用.给出错误

test_dir.sh: line 13: [: -q: binary operator expected
directory is not mounted
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙......我需要这个工作......

fed*_*qui 6

关键是说:

if [ mountpoint -q "$new_dir" ]   # WRONG
Run Code Online (Sandbox Code Playgroud)

您不必使用test, [因为mountpoint -q "$new_dir"已经返回了一个布尔值.所以这就是你所需要的:

if mountpoint -q "$new_dir"
Run Code Online (Sandbox Code Playgroud)

来自man point:

Mountpoint检查目录是否为挂载点.

退出状态

如果目录是挂载点则为零,否则为非零.

事实上你甚至可以说:

mountpoint -q "$new_dir" && echo "mounted" || echo "not mounted"
Run Code Online (Sandbox Code Playgroud)

如果你真的想使用[ ],那么你需要在里面执行命令并考虑退出状态:

if [ ! $(mountpoint -q "/home") ]; then
    echo "directory is mounted"
else
    echo "directory is not mounted"
fi
Run Code Online (Sandbox Code Playgroud)

注意我否定了结果[ ! expression ].


为什么你得到二元运算符预期的错误?

因为您在测试中编写了一个不受支持的表达式.

man test 解释它接受的语法:

[ EXPRESSION ]
[ ]
[ OPTION
Run Code Online (Sandbox Code Playgroud)

并且它还提到它以EXPRESSION确定的状态退出.

当你说mountpoint内部时[,bash假定它正在处理一个表达式.给定可能条件的列表(6.4 Bash条件表达式),第一个元素不是运算符的事实使得bash想要在它之后看到二元运算符,例如=,=~......因为它看到-q,它失败并提到-q为问题.