如何扫描字符串的内容以查看它是否包含大写或小写字符

时间:2014-10-21 04:11:49

标签: linux string bash

您好我正在尝试创建一个密码生成器来扫描字符串以查看它是否包含大写或小写字符。字符串的内容是使用一组字符生成的

char=(0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V X W Y Z)

   #chars=(~ ! @ # $ % ^ & * - +)                                     
####rand2=$random % 11


   max=${#char[*]}    for i in `seq 1 $pwdlen`
      do
           let "rand=$RANDOM % $max"
                  str="${str}${char[$rand]}"
      done    echo $str    exit 0 fi str=$1 len=${#str}

if [ $len -lt 8 ] then
        echo $str is too short fi if [ $len -gt 16 ] then
        echo $str is too long fi

4 个答案:

答案 0 :(得分:1)

如果字符串包含至少一个大写字符,则使用正则表达式(正则表达式)进行检查:

if [[ "$str" =~ [[:upper:]] ]]; then
  echo "uppercase character found"
fi

使用正则表达式检查字符串是否包含至少一个小写字符:

if [[ "$str" =~ [[:lower:]] ]]; then
  echo "lowercase character found"
fi

答案 1 :(得分:0)

检查字符串是否包含至少1个大写字符:

[[ "$str" == *[[:upper:]]* ]] && echo "one uppercase character exists"

检查字符串是否包含至少1个小写字符:

[[ "$str" == *[[:lower:]]* ]] && echo "one lowercase character exists"

答案 2 :(得分:0)

您可以使用bash案例转换操作。

if [[ $passwd = ${passwd,,} ]]; then
  echo "$passwd" has no upper-case letters
fi

if [[ $passwd = ${passwd^^} ]]; then
  echo "$passwd" has no lower-case letters
fi

第一个表达式 - ${passwd,,} - 将所有大写字母转换为小写字母,因此如果它没有改变任何内容,则没有大写字母。同样,${passwd^^}会将小写字母转换为大写字母。

需要bash 4。

答案 3 :(得分:0)

尝试在条件过滤器上使用ascii字符代码..在其他情况下也适用于需要检查数字,小写字符等的其他情况

echo $password | while read -n1 char
do
  ascii_code=$(printf "%d\n" \'$char)
  if [ $ascii_code -ge 65 ] && [ $ascii_code -le 90 ]; then
    echo "Found $char : $ascii_code"
  fi
done