循环测试所有NFS安装点

时间:2019-05-08 07:34:32

标签: linux bash nfs

此代码效果很好

mountpoint="/mnt/testnfs"
read -t1 < <(stat -t "$mountpoint" 2>&-)
if [ -z "$REPLY" ] ; then
echo "NFS mount stale. Removing..."
fi

如果我尝试将其放入循环中:

declare -a nfs_array=( "/mnt/testnfs1" "/mnt/testnfs2/" )

for i in "${nfs_array[@]}"
    do
        read -t1 < <(stat -t "$nfs_array" 2>&-)
        if [ -z "$REPLY" ] ; then
            echo "NFS dead"
        fi 
done

目标是测试所有安装点,此代码测试并仅读取nfs_array中的第一个条目。如果我将testnfs1换成testnfs2,则此代码将测试testnfs2挂载点,而忘记了testnfs1:-(

2 个答案:

答案 0 :(得分:0)

在循环中应该是:

read -r -t1 < <(stat -t "$i" 2>&-)

当前,它只是读取第一个数组值,而未使用$i

答案 1 :(得分:0)

如果您确实要列出所有个nfs挂载(标题说明了这一点),请使用以下任一方式:

mount | grep ' type nfs' | ...

这可能具有误报,因为安装点或安装路径包含type nfs

如果/ proc /文件系统可用,这是一种更好的方法:

awk '$3 ~ /^nfs/ {print}' /proc/mounts | ...

在这里,我不确定如果安装点或安装的路径中包含空格-我从来没有遇到这种情况。