Q:

renaming multiple files adding a counter in bash

I had a look around other topics, but I am still doing it wrong.  I am  a total beginner in bash, sorry if I'm asking something already asked in other topics. 
My purpose: change the name of multiple files adding numbers to them.  E.g.:
my files: filexx.txt, fileyy.txt, filezz.txt
The result I want:
test_name_1_filexx.txt, test_name_2_fileyy.txt, test_name_3_filezz.txt
What I have written so far:
#! /bin/bash
COUNTER=1
MYSTRING=test_name_
for i in *.txt
do
 mv "$i" "$(printf $MYSTRING $COUNTER '_' $i)"
 COUNTER="$COUNTER"+1
done

The above basically leaves only the last file in the directory, and it names it "test_name_"  Thanks for your help :)

A:

Here's an easier way to reproduce your problem:
$ printf foo bar baz
foo

The "bar" and "baz" are ignored.  This is because printf takes one message with format specifiers, and a number of variables to substitute:
$ printf "%s, %s and %s" foo bar baz
foo, bar and baz

Since it looks like you just want to concatenate variables, there's no point in using printf at all:
#! /bin/bash
counter=1
mystring=test_name_
for i in *.txt
do
 mv "$i" "${mystring}${counter}_${i}"
 counter=$((counter+1))
done

