#!/bin/sh #check arguments (we allow one optional argument of one natural number #(positive intiger), with no leading zeros, commas, or decimal point) case "$#" in 0) sleep=1 ;; 1) sleep=`expr x"$1" : x'\([1-9][0-9]*\)$'` [ x"$sleep" != x ] || { 1>&2 echo "$0: usage: $0 [seconds]" exit 1 } ;; *) 1>&2 echo "$0: usage: $0 [seconds]" exit 1 ;; esac #how do we output just a single control-G? #how do we do backslash escape sequences? echo_e= x=`echo '\056'` if [ X. != X"$x" ]; then x=`2>>/dev/null echo -e '\056'` if [ X. = X"$x" ]; then echo_e=-e else 1>&2 echo "$0: don't know how to do backslash escape sequences with echo" exit 1 fi fi #how do we do supression of newline echo_c= echo_n= echo $echo_e '' | read x || { 1>&2 echo "$0: echo $echo_e '' | read x fails!" exit 1 } echo $echo_e '\c' | read x if [ $? -ne 0 ]; then echo_c='\c' else 2>>/dev/null echo $echo_e -n '' | read x if [ $? -ne 0 ]; then echo_n=-n else 1>&2 echo "$0: don't know how to do supress newline with echo" exit 1 fi fi #how do we generate ^G? for echo_a in '\a' '\007' '' '' do x=`echo $echo_e $echo_n "$echo_a$echo_c"` [ X"$x" = X'' ] && break done [ X"$echo_a" != X ] || { 1>&2 echo "$0: don't know how to generate control-G (bell) with echo" exit 1 } #and now that we've gotten all that out of the way: #ring the bell, repeatedly while : do echo $echo_e $echo_n "$echo_a$echo_c" sleep "$sleep" done