我正在编写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
但是比预期更多的比赛。请帮我正确的正则表达式。
答案 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 。