#!/bin/sh set -eu ends_with_bak() { case "${1}" in *.bak) return 0 ;; *) return 1 ;; esac } _bak() { filename="${1}" mv "${filename}" "${filename}.bak" } _unbak() { filename="${1}" new_filename="$(echo "${filename}" | sed 's/\.bak$//')" if [ -e "${new_filename}" ]; then echo "Filename '${new_filename}' already exists" >&2 return 1 fi mv "${filename}" "${new_filename}" } for filename in "${@}"; do if ends_with_bak "${filename}"; then _unbak "${filename}" else _bak "${filename}" fi done