Language bourne shell
(Gramatically correct)
Date: | 06/14/07 |
Author: | Jeff Popp |
URL: | n/a |
Comments: | 2 |
Info: | n/a |
Score: | ![]() |
#!/bin/sh # # Copyright (C) 1996 Jeff Popp # Narnian Sky Software # All Rights Reserved # Used by Permission # # beer # # Computer saves time with the "Ninety-nine Bottles of Beer" song. # # Written October 26, 1999 - Jeff Popp V1.0 # Modified August 22, 2000 - Jeff Popp V1.1 -Add capabilities to # modify decrement # count and allow $N>99 # # # Note: This program has been written so that song rhymes by using # the line "If one of those bottles should happen to fall" as # opposed to the usual "You take one down and pass it around". # # It also manicures the output lines so that the number of # syllables remains constant. One and two syllable numbers are # followed by the word "more". # # ie: "18 more bottles of beer on the wall" # vs. # "17 bottles of beer on the wall" # # Special consideration is also given to remaining bottle counts # of one and zero. Instead of "If 1 of those bottles should happen # to fall" the line becomes "If that one bottle should happen to # fall", and "0 more bottles of beer on the wall" becomes "No more # bottles of beer on the wall". # # ################################################################### # Set Variables ################################################################### N=99 # Beginning number of bottles DECREMENT=1 # Number to decrease each round ################################################################### # Functions ################################################################### BottleCheck () { case $NN in 1) BOTTLES="bottle" ;; 0) NN="No" BOTTLES="bottles" ;; *) BOTTLES="bottles" ;; esac } Decrement () { case $DECREMENT in 12|10|9|8|6|5|4|3|2) IF="$DECREMENT of those" ;; 1) IF="one of those" ;; *) IF=$DECREMENT ;; esac } Gravity () { BOTTLES=bottles while [ $N -gt "0" ] ; do FirstLines NN=`expr $N - $DECREMENT` ZeroCheck echo "If $IF $BOTTLES should happen to fall," BottleCheck LastLine done } FirstLines () { echo "$N $BOTTLES of beer on the wall," echo "$N $BOTTLES of beer," } LastLine () { N=`expr $N - $DECREMENT` if [ $N -lt 20 -a $N != 17 -o $N -lt 100 \ -a `expr $N % 10` = 0 -a $N != 70 ] ; then echo "$NN more $BOTTLES of beer on the wall" else echo "$N $BOTTLES of beer on the wall" fi echo } ZeroCheck () { if [ $N -le $DECREMENT ] ; then DECREMENT=$N fi if [ $NN -le 0 ] ; then DECREMENT=$N NN=0 Decrement fi case $N in 1) IF="that one" BOTTLES="bottle" ;; *) if [ $DECREMENT = $N ] ; then IF="those $N" fi ;; esac } ################################################################### # Main ################################################################### Decrement Gravity
Download Source | Write Comment
Alternative Versions
Version | Author | Date | Comments | Rate |
---|---|---|---|---|
1 | Craig J. Copi | 04/20/05 | 0 | ![]() ![]() |
small pieces loosely joined | anonymous | 03/14/06 | 0 | ![]() ![]() |
Download Source | Write Comment
Add Comment
Please provide a value for the fields Name,
Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.
Please don't post large portions of code here! Use the form to submit new examples or updates instead!
Comments
Download source is broken (or the source is broken, I don't know which one), but the file is in windows encoding (meaning CRLF at ends of lines instead of the simple LF). /bin/sh does not take it too well and refuses to run.
You will have to convert newlines to the nice unix format if you want this to work.
$ vim [source]
:set filetype=unix
:wq
works pretty well.