You're iterating over the contents of the array then trying to use the element as an index. You need to use the element directly as the argument:
for i in "${cmd[@]}"
do
a=$(deep status | awk -v my_var="$i" '$0 ~ my_var {print $2 ~ /RUNNING/}')
done
It is possible to iterate over the indices, then use the index in the array reference, but this is probably not necessary unless you need to do something with the indices themselves:
for i in "${!cmd[@]}" # Note the "!"
do
echo "$i" # or some other operation using the index
a=$(deep status | awk -v my_var="${cmd[$i]}" '$0 ~ my_var {print $2 ~ /RUNNING/}')
done
Note that it's not necessary to pipe grep into awk since the latter can do the the matching itself. I have used $0 here, but you can be more specific if you know which field you're trying to match.
Also, repeatedly running the same command in a loop can be slow. Depending on how "deep status" works and the format of your array, you may be able to do the whole thing without the for loop.
And use $() instead of backticks. They're much more readable and more easily nested.
avariable has no closing backtick, and there's nodonestatement. What doesdeepdo?