#!/bin/sh -ex # Need root [ "$(id -u)" -eq 0 ] || /usr/local/bin/sudo "${0}" "${@}" # Return true if the specified filesystem is mounted with the given type; false otherwise # Does not handle swap entries in fstab is_mounted() { src="${1}" dir="${2}" type="${3}" mount | while read msrc on mdir mtype mflags do mtype="${mtype##(}" mtype="${mtype%%,}" mtype="${mtype%%)}" [ "${dir}" = "${mdir}" -a "${type}" = "${mtype}" ] && break done return $? } # Return all the useful lines from the fstab file fstab() { sed -e 's/#.*$//; /^[[:space:]]*$/d' "$(dirname "${0}")/fstab" } # Perform mount for all unmounted filesystems in fstab do_mount() { fstab | while read src dir type flags fsck dump extra do if ! is_mounted "${src}" "${dir}" "${type}" then mkdir -p "${dir}" mount -t "${type}" -o "${flags}" "${src}" "${dir}" fi done true } # Perform umount for all mounted filesystems in fstab do_umount() { fstab | tail -r | while read src dir type flags fsck dump extra do if is_mounted "${src}" "${dir}" "${type}" then umount "${dir}" fi done true } case "$(basename "${0}")" in mount) do_mount ;; umount) do_umount ;; esac