Shell Scripting: Convert Uppercase to Lowercase

Posted on in Categories , , last updated February 24, 2014

I‘ve a small shell script and I would like to convert all incoming user input to lowercase using a shell script. How do I convert uppercase words or strings to a lowercase or vise versa on Unix-like / Linux bash shell?

Use the tr command to convert all incoming text / words / variable data from upper to lower case or vise versa (translate all uppercase characters to lowercase). Bash version 4.x+ user can use parameter expansion to modify the case of alphabetic characters in parameter.

Convert all text in a file from UPPER to lowercase

To translate or delete characters use tr command. The basic syntax is:

tr 'set1' 'set2' input


tr 'set1' 'set2' input > output

Type the following command at shell prompt:
$ tr '[:upper:]' '[:lower:]' < input.txt > output.txt
$ cat output.txt

Task: Convert Data Stored in a Shell Variable From UPPER to lowercase:

Type the following command:
$ echo $VAR_NAME | tr '[:upper:]' '[:lower:]'
$ echo $VAR_NAME | tr '[:lower:]' '[:upper:]'

Bash version 4.x+: Uppercase to lowercase or vice versa

The bash version 4.x+ got some interesting new features. Type the following commands to convert $y into uppercase:

y="this Is A test"
echo "${y^^}"

Sample outputs:


Type the following commands to convert $y into lowercase:

y="THIS IS a TeSt"
echo "${y,,}"

Sample outputs:

this is a test

Sample Shell Script

# get filename
echo -n "Enter File Name : "
read fileName
# make sure file exits for reading
if [ ! -f $fileName ]; then
  echo "Filename $fileName does not exists."
  exit 1
# convert uppercase to lowercase using tr command
tr '[A-Z]' '[a-z]' < $fileName
# Note Bash version 4 user should use builtins as discussed above

Recommended readings:

# Additional correction by D.K.; Editing by VG – log #

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin and a trainer for the Linux operating system/Unix shell scripting. He has worked with global clients and in various industries, including IT, education, defense and space research, and the nonprofit sector. Follow him on Twitter, Facebook, Google+.

23 comment

  1. This work fine when using latin characters, but not when using Unicode characters. For example a string with Cyrillic characters (“Английский”) doesn’t get converted. Any tips on how to do that?

  2. Well, tr has no way of knowing what are uppercase and what are lowercase cyrillic characters. You need to provide it with this information.


    The example above is equivalent to:

    tr [ABCDEFGHIJKLMNOPQRSTUVWXYZ] [abcdefghijklmnopqrstuvwxyz]
  3. Damn I didn’t notice this thing had html tags enabled and used angled brackets in my post. I meant:

    tr [all uppercase cyrillic characters] [their lowercase equivalent]
    instead of just ‘tr’

  4. Is there any options so that Other than first letter of a word get converted to lowercase

  5. Is there any options so that Other than first letter of a word get converted to lowercase

    You mean preserve the first and translate the rest? How about:
    echo $(echo $VAR_NAME | cut -c1)$(echo $VAR_NAME | cut -c2- | tr [A-Z] [a-z])

  6. If you just want to change the case of the file extension, here is one way to do it:

    for f in *.TXT; do mv $f `basename $f .TXT`.txt; done;

  7. Thanks for this opportunity, to ask this question, This is my question.

  8. hey guys your info has been really helpful. I m an Mca student and am vry good in C lang. Since it is embedd in ma brain, i feel it very hard to learn another script lang llike Unix but i want to perforn in Unix too. Could please help me by providn som basic tips so i can learn shell progming quickly.
    Ur help vl b greatly appreciated

  9. In bash 4, the easiest and by far the most elegant way to do this for lowercase is:

    echo ${string,,*}

    and for uppercase:

    echo ${string^^*}

  10. This doesn’t work with the old Solaris version of tr, you need to use the GNU version in /usr/xpg4/bin on Solaris.

  11. I need to write a shell script that copies a list of files from one directory to another. During copying the script should capitalize the first letter of the filename and lowercase all other letters.
    I need the script as soon as possible.Please

  12. try this:

    for it in d f; do find -depth -type $it |sort -r |while read aa; do mv "$aa" "${aa,,}"; done ; done

  13. for UserName in `cat users` ;
    PassWord=$( echo $( tr ‘[:lower:]’ ‘[:upper:]’ <<< ${UserName:0:1} )${UserName:1} ) ;

    can i understand cearly what does this code do to
    text in the users file

  14. Every file in the directory starting with a capital P to lower cases

    for i in `ls P*`; do mv $i $(echo $i | tr [[:upper:]] [[:lower:]]); done

Comments are closed.