I have a directory with the files names as "a b c.jpg", "d e f 0.jpg", "g h i.jpg"
I need a script to have all the files ending with "0.jpg" to become "_0.jpg"
So, in the above example the second file should become "d e f_0.jpg"
I think your question should read that you want files ending with " 0.jpg" to become "_0.jpg" (note the space in the first quotes). That makes sense with your example.
for i in *\ 0.jpg ; do mv -- "$i" "${i/ 0.jpg/_0.jpg}" done That is, for every file matching the pattern "* 0.jpg", rename it replacing " 0.jpg" with "_0.jpg"
Edit: For added safety, consider using -n (no-clobber) or -i (interactive) as an option to mv(1).
mv -- "$i" to guard agains filenames starting with a dash.The rename tool might be what you need.
ls -1 | grep .jpg | awk -F "." '{print $1 "_0." $2}' ls in scripts, never use grep to match filenames, don't use external tools if there is a simpler builtin solution.