正则表达式匹配子挂载点

时间:2016-02-21 07:32:57

标签: regex bash

我正在编写bash脚本,用于检查“子坐骑”在fstab上的“父坐骑”之前没有退出

即:如果我在fstab上有以下挂载:

好:先装载父点

/Application
/Application/home

坏:先挂载儿童点

/Application/home
/Application/

所以我想循环fstab中的所有挂载点,并将匹配与正则表达式进行比较,该正则表达式将检查“挂载点”的正则表达式+ /以捕获所有子挂载点。在这种情况下,我想捕获任何具有/ application / mount point的挂载点。

我正在尝试

for child in $MATCH;do
  if [[ "$child" =~ [/\/application\//] ]];then
    echo "$child has child mounts before it"
  fi
done

但是比预期更多的比赛。请帮我正确的正则表达式。

2 个答案:

答案 0 :(得分:0)

我会为此使用Awk。

awk '/\/Application\// { child=1; next }
    /\/Application/ { if (child) {
        print FILENAME ": error: child mount precedes application mount"
        exit(1)
    }
    app=1 }
    END { if (! child || ! app) {
       print FILENAME ": missing mount(s)"
        exit(2)
    }' /etc/fstab

你确定fstab中的挂载点顺序确实很重要吗?

答案 1 :(得分:0)

给定一个包含来自/ etc / fstab的所有挂载点的文件,用换行符分隔,例如:

/Application/home
/Application/

您可以执行以下

grep -n '/Application/' mount_points_file | sort -k2 -t\:

将输出:

2:/Application/
1:/Application/home

从此步骤中您可以看到 / Application / 出现在第2行,而其子 / Application / home 出现在第1行,您定义为一个糟糕的订单。

实际上sort的{​​{1}}选项可以检测到疾病并在 stderr 中通知您:

-c

将输出:

grep -n '/Application/' mount_points_file | sort -t\: -k2 | sort -c -t\: -k1n

但我认为它将停止在第一次无序进入。

除此之外:我认为sort: -:2: disorder: 1:/Application/home的订单不重要。 我使用fstab运行Archlinux,我在 / 之前有 / boot