Bash script check string for uppercase letter

22,436

[^a-zA-Z0-9] means anything except for a-z, i.e. lowercase letters, A-Z, i.e. uppercase letters, and 0-9, i.e. digits. sss, Sss, SSS all contain just letters, so they can't match.

[[ $password =~ [A-Z] ]]

is true if the password contains any uppercase letter.

You should set LC_ALLbefore running this kind of tests, as for example

$ LC_ALL=cs_CZ.UTF-8 bash -c '[[ č =~ [A-Z] ]] && echo match'
match
$ LC_ALL=C           bash -c '[[ č =~ [A-Z] ]] && echo match'
# exit-code: 1

[[:upper:]] should work always.

Share:
22,436
Robert Vlasiu
Author by

Robert Vlasiu

Updated on July 09, 2022

Comments

  • Robert Vlasiu
    Robert Vlasiu almost 2 years

    I am trying to check a string for any Uppercase letter. my code shows NO UPPER for any input, may it be "sss", "Sss", "SSS"

    if [[ "$pass" =~ [^a-zA-Z0-9] ]]
    then
       echo "Upper found"
    else
       echo "no upper"
    fi