r.mapcalc

r.mapcalc should do all the things you want,

some names are variables e.g.

r.mapcalc "output=eval(const=6.5,raster_name*const)"

and though is logic control

the syntax is

r.mapcalc "output=if(condition,action_if_true,action_if_false)"

e.g.

r.mapcalc "output=if(raster1==7 && raster2==3,1,0)"

ifs can be embedded, however there is no other kind
of flow control like loops.

there should be some documention under the g.manual
command e.g.

g.manual r.mapcalc

cheers Tom