#!/usr/bin/sh -e # Fortune implementation in POSIX sh/awk usage() { echo 'Usage: fortune [OPTIONS] a simple POSIX sh/awk implementation of fortune -h, --help show this help message -l, --list list installed cookie files -c FILE, --cookie FILE specify cookie file -n LENGTH, --min LENGTH specify min fortune length -N LENGTH, --max LENGTH specify max fortune length fortune looks for fortunes in $FORTUNEDIR, which defaults to /usr/share/fortune. Exit codes: 0 success 1 argument error 2 parse error' } DIR=${FORTUNEDIR:-"/usr/share/fortune/"} FILE="$(find $DIR -type f -not -name '*.dat')" MAXLENGTH=1000000000000 MINLENGTH=0 while [ "$1" != "" ]; do case $1 in -h | --help) usage exit ;; -c | --cookie) FILE=$DIR/$2 ;; -n | --min) MINLENGTH=$2 ;; -N | --max) MAXLENGTH=$2 ;; -l | --list) ls -1 $DIR exit ;; *) echo "ERROR: unknown option \"$1\"" usage exit 1 ;; esac shift 2 done [ "$MAXLENGTH" -lt "$MINLENGTH" ] && { echo "ERROR: maximum length is less than minimum length" exit 2 } [ -d "$FILE" ] && { echo "ERROR: directory given, please provide a file or glob of files" exit 2 } awk -v maxlen=$MAXLENGTH -v minlen=$MINLENGTH \ 'BEGIN { f++ } $1 == "%" { len = length(fortunes[f]) if ( len>maxlen || len