≡ Menu

Shell Scripting: Convert Uppercase to Lowercase

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 #

Share this tutorial on:

Your support makes a big difference:
I have a small favor to ask. More people are reading the nixCraft. Many of you block advertising which is your right, and advertising revenues are not sufficient to cover my operating costs. So you can see why I need to ask for your help. The nixCraft, takes a lot of my time and hard work to produce. If you use nixCraft, who likes it, helps me with donations:
Become a Supporter →    Make a contribution via Paypal/Bitcoin →   

Don't Miss Any Linux and Unix Tips

Get nixCraft in your inbox. It's free:

{ 23 comments… add one }
  • Lucas Vieites February 18, 2009, 11:28 am

    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?

  • Raja Baz July 28, 2009, 10:47 am

    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]
  • Raja Baz July 28, 2009, 10:48 am

    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’

  • sanjay Katiyar August 7, 2009, 7:40 am

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

  • vinutha September 5, 2009, 4:46 am

    show the correct program fully

  • Asun Friere September 7, 2009, 4:53 am

    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])

  • reneuend September 16, 2009, 2:56 pm

    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;

  • Joseph November 1, 2010, 3:39 pm

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

    • Anil November 26, 2010, 7:39 am

      cat | tr [[:upper:]] [[:lower:]]

  • irshad December 7, 2010, 5:46 pm

    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

  • migyudtfr March 6, 2011, 8:11 pm
    #! /bin/bash
    typeset -l string
    string="HELLO WORLD"
    echo $string
    • chandra September 7, 2011, 2:17 pm

      Nice example it helped my issue

  • Riot May 7, 2011, 6:52 pm

    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^^*}

  • mdinaz August 11, 2011, 3:54 pm

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

  • bdog July 2, 2012, 4:53 pm

    Is this a backslash, or a single quote?

  • Ben July 29, 2012, 12:39 pm

    $ echo ibm | awk ‘{ print toupper($1); }’

    Works also.

  • Perl! August 29, 2012, 3:32 pm

    perl -pe ‘$_=uc’

  • Rahul January 11, 2013, 1:09 pm

    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

  • ponnuvel June 24, 2014, 8:09 am

    no use…

  • panlex_2010 September 12, 2015, 4:52 pm

    Another way (use “ucase” or “lcase”):

    echo $var | dd conv=lcase 2>/dev/null
  • bill February 24, 2016, 9:25 am

    try this:

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

  • praveen April 8, 2016, 1:55 pm

    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

  • Ronnie October 30, 2016, 10:02 am

    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

Leave a Comment

You can use these HTML tags and attributes: <strong> <em> <pre> <code> <a href="" title="">

   Tagged with: , , , , , , , , , , , ,