#[Perl 5](https://www.perl.org/), 243 bytes

A shorter Perl 5 solution is posted as a community wiki solution [here][1].

    $}=" bottle";$s='s';$o=" of beer";$w=" on the wall";$i=99;while($i>1){say"$i$}$s$o$w, $i$}$s$o.";$s=''if--$i<2;say"Take one down and pass it around, $i$}$s$o$w.\n"}say"$i$}$s$o$w, $i$}$s$o.";say"Go to the store and buy some more, 99$}s$s$o$w."

Using the free -M5.010 switch for "say" instead of "print".

Cheers.


  [1]: https://codegolf.stackexchange.com/questions/64198/99-bottles-of-beer/64292#64292