#!/bin/bash die() { printf "%s: Error: %s\n" "$0" "$*" >&2; exit 1; } whole_device() { case "$1" in *-part?) false ;; *-part??) false ;; *-part???) false ;; */usb\*) false ;; *) true ;; esac } confirm_usb() { local msg="This will completely overwrite device:\n\n\t%s\n\nType 'yes' to confirm.\nContinue? " printf "$msg" "$1" >&2 read line case "$line" in [yY][eE][sS]) return ;; *) die "Aborted by user." ;; esac } choose_usb() { local devs maj set -- /dev/disk/by-id/usb* for dev; do shift whole_device "$dev" || continue set -- "$@" "$dev" done if [ $# = 0 ]; then die "no usb device found" elif [ $# = 1 ]; then confirm_usb "$1" || die impossible USB="$1" else die "multiple USB devices connected and choice between them is unimplemented. ($*)" fi } choose_cdrom() { die 'choose_cdrom: unimplemented; specify cdrom device with --out' } choose_usb echo USB=$USB