set -u _read() { # The miniprokit call in the installer redirects this script to stdin, # so we need to reconnect stdin to the tty. We can't do this for the # whole script with exec, because the shell reads the script in parts. read "${@}" 0<&1 } _select() { # Field width of the prompt numbers. select_width=$(expr ${#} : '.*') select_i= while :; do case "${select_i}" in '') select_i=0 for select_word in "${@}"; do select_i=$(expr ${select_i} + 1) printf "%${select_width}d) %s\\n" \ ${select_i} "${select_word}" done ;; *[!0-9]*) printf 'Please enter a number in range.\n' >&2 ;; *) if [ ${select_i} -gt 0 ] && \ [ ${select_i} -le ${#} ]; then shift $(expr $select_i - 1) select_result="${1}" break fi printf 'Please enter a number in range.\n' >&2 ;; esac # Prompt and read input. printf '%s' "${PS3-#? }" >&2 _read -r select_i || exit done } printf '\nConfigure the network' printf '\n=====================\n\n' printf 'Network configuration method:\n' _select 'Static' 'DHCP' if [ "x${select_result}" = 'xStatic' ]; then printf 'Network interface (e.g. "eth0"): ' _read -r netiface printf 'Network address (e.g. "192.168.1.2"): ' _read -r netaddr printf 'Network mask (e.g. "255.255.255.0"): ' _read -r netmask printf 'Network gateway (e.g. "192.168.1.1"): ' _read -r netgw cat >/etc/network/interfaces <&2 printf '\nInstallation complete!\n'