A few bash time-savers I use daily are curly braces, that allow me to substitute part of a filename without typing it out twice, so while the following does work:
$ ls
captains_log-stardate_47988.log
$ mv -v captains_log-stardate_47988.log captains_log-supplemental.log
renamed 'captains_log-stardate_47988.log' -> 'captains_log-supplemental.log'
$
... I can instead use:
$ ls
captains_log-stardate_47988.log
$ mv -v captains_log-{stardate_47988,supplemental}.log
renamed 'captains_log-stardate_47988.log' ->'captains_log-supplemental.log'
$
I also make extensive use of 'for' loops, including iterating through a range of numbers, again using curly braces, for example:
$ for FOO in {99..0}; do echo "${FOO} bottles of beer on the wall, ${FOO} bottles of beer.";echo "Take one down, pass it around...";done
99 bottles of beer on the wall, 99 bottles of beer.
Take one down, pass it around...
98 bottles of beer on the wall, 98 bottles of beer.
Take one down, pass it around...
97 bottles of beer on the wall, 97 bottles of beer.
Take one down, pass it around...
96 bottles of beer on the wall, 96 bottles of beer.
Take one down, pass it around...
95 bottles of beer on the wall, 95 bottles of beer.
Take one down, pass it around...
94 bottles of beer on the wall, 94 bottles of beer.
Take one down, pass it around...
...
...which will, of course, keep going until it reaches zero.