c="a"
#[[:upper:]] and [[:lower:]] are character classes of a pattern;
#&& and || turn the exit code of [[ ]] into a word
[[ "$c" == [[:upper:]] ]] && isUpper=true || isUpper=false
[[ "$c" == [[:lower:]] ]] && isLower=true || isLower=false
#isUpper is false
#isLower is true
#a class knows the letters of the locale, not only ASCII;
#a range like [A-Z] depends on the locale, so the classes are safer
cyrillic="Ж"
[[ "$cyrillic" == [[:upper:]] ]] && isUpperCyrillic=true || \
isUpperCyrillic=false
#isUpperCyrillic is true
echo "isUpper is $isUpper"
echo "isLower is $isLower"
echo "isUpperCyrillic is $isUpperCyrillic"