#!/bin/bash _autocommandrun() { command="$1" key="$2" value="$3" # only passed through if command is backup or restore. backup_file="$4" temp_path="$5" case "$key" in volume) echo "Volume: $value" ;; path) echo "Path: $value" ;; file) echo "File: $value" ;; *) _die "Unknown key $key passed to auto${command}. We only support volume, path and file." ;; esac } _autocommandparse() { # first argument is the command # if the command is backup or restore, then the last two arguments are the backup file and the temporary path # all other arguments are of form: # key=value # where key can be one of volume, path or file. # value is the path or volume name. # we iterate over the key=value arguments, and for each we call: # autorun local command="$1" shift # Extract the backup file and temp path (last two arguments) local args=("$@") local arg_count=${#args[@]} local backup_file="${args[$arg_count-2]}" local temp_path="${args[$arg_count-1]}" # Process all key=value pairs for ((i=0; i<$arg_count-2; i++)); do local pair="${args[$i]}" # Skip if not in key=value format if [[ "$pair" != *"="* ]]; then continue fi local key="${pair%%=*}" local value="${pair#*=}" # Key must be one of volume, path or file _autocommandrun "$command" "$key" "$value" "$backup_file" "$temp_path" done } autocreate() { _autocommandparse create "$@" "-" "-" } autonuke() { _autocommandparse nuke "$@" "-" "-" } autobackup() { _autocommandparse backup "$@" } autorestore() { _autocommandparse restore "$@" }