#!/bin/sh WORD="" DICT="/usr/share/dict/words" ARGC=0 usage() { cat << EOF usage: $0 [-h] [-w word] [-d file] options: -w set word to \`word\` -d read dictionary from \`file\` ($DICT by default) -h show help EOF exit $1 } while getopts d:w:h OPT; do [ $OPTIND -gt $ARGC ] && ARGC=$OPTIND case $OPT in h) usage 0 ;; w) WORD=$OPTARG ;; d) DICT=$OPTARG ;; \?|*) usage 1 ;; esac done if [ -z "$WORD" ]; then # check if dictionary file exists [ ! -e "$DICT" ] && echo "dictionary file doesn't exist!" && exit 1 # check if dictionary file is a regular file (not directory, block device, etc.) [ ! -f "$DICT" ] && echo "dictionary file isn't a regular file!" && exit 1 # check if dictionary file contains at least one line [ ! "`wc -l "$DICT" | cut -d' ' -f1`" -gt "0" ] && echo "dictionary file is empty!" && exit 1 # filter words containing apostrophe or space, or words longer than 12 characters WORD="`sed -e "/[' ]/d" -e '/.\{13\}/d' "$DICT" | sort -R | head -n1`" # check if word is empty [ -z "$WORD" ] && echo "no usable words found in dictionary" && exit 1 fi # convert word to lowercase WORD="`echo "$WORD" | tr '[:upper:]' '[:lower:]'`" pre_exit() { trap - EXIT # prevent double exit trigger echo "" echo "the word was $WORD" exit } # run pre_exit function on interrupt (Ctrl-C) trap pre_exit INT # main game loop (written in awk) tput clear # clear screen tput cup `stty size | cut -f1 -d' '` # move cursor to bottom left corner $0.awk -vword="$WORD" pre_exit