As you know landsat data has separate files for different bands. Creating a
subset is a wise option to work on region of our interest. Therefore, I used
this method to subset my image -

d.zoom || g.region
g.region -p
r.mapcalc *subset*=original

But with this I can subset one band data at a time. Is it somehow possible
to use i.group and region definition to obtain subsets of all bands? Scripting might be an answer but I have no much idea about it!

The above question fits to be a generic automation question, like how to repeat task T over several maps M?.

If you do work on Linux (with a bash-shell beforehand), you can utilise bash shell command line utilities (read also Shell Commands). Among the most frequently used is the for loop(ing construct). A simple example could be (where MAP is a variable which "contains" in each loop one of the requested maps *MAP_A*, *MAP_B*, *MAP_C*):

Of course one can feed the loop with as many maps -- let them be vector or raster -- as asked! Another example, within GRASS-GIS' environment, could be using the results of a g.list command to feed the $MAP variable (given there are raster maps named with the prefix "landsat_"):