Bash script check string for uppercase letter
[^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_ALL
before 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.
I had trouble with this script no matter how I ran it, until I changed it to let my input string be $1, and then set pass=$1. I also changed the regex a bit. What I finally got to work correctly is below. Then I could run bash (script) John and get a valid response. Hope this helps.
pass=$1if [[ "$pass" =~ ^[A-Z] ]]then echo "Upper found"else echo "No Upper"fi