сравнивает, показывает что прописано но не смонтировано, или смонтировано но не прописано:
#!/bin/bash
#объявляем массивы, в которых будут собраны и сортированы точки монтирования
declare -a fst #fstab
declare -a mnt #mount
declare -a fstinmnt #fstab in mount present
declare -a mntinfst #mount in fstab present
declare -a nfstinmnt #fstab in mount absent
declare -a nmntinfst #mount in fstab absent
#заполняем первичные массивы точками монитрования прописанными в fstab и фактически смонтированны mount
fst=( `egrep -v '^#|^$' /etc/fstab |awk '{print $2}' |egrep -v '\/proc|\/dev\/shm|\/dev\/pts|\/sys|swap'` )
mnt=( `mount |awk '{print $3}' |egrep -v '\/proc|\/dev\/shm|\/dev\/pts|\/sys|\/var\/lib\/nfs'` )
#инициализируем индекс-каунтеры для сортированных массивов
fst_members=${#fst[@]}
mnt_members=${#mnt[@]}
#fst -> mnt
#построчно сравниваем маунтпоинты из fstab с mount. совпадения кладем в fstinmnt[], промахи в nfstinmnt[].
for f in `seq -s " " 0 $[$fst_members - 1]`; do
for m in `seq -s " " 0 $[$mnt_members - 1]`; do
if [ "${fst[$f]}" = "${mnt[$m]}" ]
then fstinmnt=( "${fstinmnt[@]}" "${fst[$f]}" ) ; break
else nfstinmnt=( "${nfstinmnt[@]}" "${fst[$f]}" )
fi
done;
done
#инициализируем индекс-каунтеры для сортированных массивов
fstinmnt_members=${#fstinmnt[@]}
nfstinmnt_members=${#nfstinmnt[@]}
#дедуплицируем вывод, т.к. сравнение происходит в несколько проходов, имеем дубли, которые надо убрать.
for i in `seq -s " " 0 $[$fstinmnt_members - 1]`; do
for ni in `seq -s " " 0 $[$nfstinmnt_members -1]`; do
if [ "${fstinmnt[$i]}" = "${nfstinmnt[$ni]}" ]
then nfstinmnt[$ni]=
fi
done;
done
nfstinmnt=( `printf '%s\n' ${nfstinmnt[*]} |sort |uniq |paste -d" " -s` )
#mnt -> fst
#построчно сравниваем маунтпоинты из mount c fstab. совпадения кладем в mntinfst[], промахи в nmntinfst[].
for m in `seq -s " " 0 $[$mnt_members - 1]`; do
for f in `seq -s " " 0 $[$fst_members - 1]`; do
if [ "${mnt[$m]}" = "${fst[$f]}" ]
then mntinfst=( "${mntinfst[@]}" "${mnt[$m]}" ) ; break
else nmntinfst=( "${nmntinfst[@]}" "${mnt[$m]}" )
fi
done;
done
#инициализируем индекс-каунтеры для сортированных массивов
mntinfst_members=${#mntinfst[@]}
nmntinfst_members=${#nmntinfst[@]}
#опять дедуплицируем вывод.
for i in `seq -s " " 0 $[$mntinfst_members - 1]`; do
for ni in `seq -s " " 0 $[$nmntinfst_members -1]`; do
if [ "${mntinfst[$i]}" = "${nmntinfst[$ni]}" ]
then nmntinfst[$ni]=
fi
done;
done
nmntinfst=( `printf '%s\n' ${nmntinfst[*]} |sort |uniq |paste -d" " -s` )
#вывод полученных результатов сравнения mount->fstab
echo "маунтпоинты прописанные в fstab и смонтированные -> ${fstinmnt[@]}"
echo "маунтпоинты прописанные в fstab и _не_ смонтированные -> ${nfstinmnt[@]}"
echo "маунтпоинты смонтированные и прописанные в fstab -> ${mntinfst[@]}"
echo "маунтпоинты смонтированные и _не_ прописанные в fstab -> ${nmntinfst[@]}"