Skip to content

Instantly share code, notes, and snippets.

@silkentrance
Last active April 28, 2016 18:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save silkentrance/ab2d6333e8a8a8521ff0eed01e16e014 to your computer and use it in GitHub Desktop.
Save silkentrance/ab2d6333e8a8a8521ff0eed01e16e014 to your computer and use it in GitHub Desktop.
Add/remove a marked section from a config file
#!/bin/bash
CMD=$(basename $0)
SED=$(which sed)
GREP=$(which grep)
ECHO=$(which echo)
CUT=$(which cut)
CAT=$(which cat)
usage()
{
${ECHO} "usage:"
${ECHO} "${CMD} add --delimiter=<DELIMITER> file-path < <CONTENT>"
${ECHO} "${CMD} remove --delimiter=<DELIMITER> file-path"
}
MODE=
DELIMITER=
FILEPATH=
if [ ${#} -lt 3 -o ${#} -gt 3 ]; then
usage
exit 0
fi
while [ ${#} -ge 1 ]; do
ARG=${1}
case "${ARG}" in
add|remove)
MODE=${ARG}
;;
--delimiter*)
DELIMITER=$(${ECHO} ${ARG} | ${CUT} -f 2 -d '=')
;;
*)
FILEPATH=${ARG}
;;
esac
shift
done
if [ -z "${DELIMITER}" ]; then
${ECHO} "no delimiter specified"
usage
exit 1
fi
if [ ! -f "${FILEPATH}" ]; then
${ECHO} "file '${FILEPATH}' does not exist"
exit 2
fi
BEGIN="# BEGIN:${DELIMITER}"
END="# END:${DELIMITER}"
${GREP} "${BEGIN}" "${FILEPATH}" >/dev/null 2>&1
RC=${?}
if [ ${RC} -eq 0 -a "${MODE}" = "add" ]; then
${ECHO} "section already in file."
exit 3
fi
if [ "${MODE}" = "add" ]; then
cp "${FILEPATH}" "${FILEPATH}.old"
${CAT} >> "${FILEPATH}" <<-EOF
${BEGIN}
$(${CAT})
${END}
EOF
elif [ "${MODE}" = "remove" ]; then
${SED} -i".old" -e "/^${BEGIN}$/,/^${END}$/d" "${FILEPATH}"
fi
#exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment