gpt4 book ai didi

linux - bash 脚本测试字符串上多个参数的条件

转载 作者:太空狗 更新时间:2023-10-29 12:09:20 25 4
gpt4 key购买 nike

我正在编写一个 bash shell 脚本,该脚本测试一个字符串并为以下内容返回 true:

1) 至少有 8 个字符

2) 至少有一个字母和一个数字

3) 同时具有小写和大写字母

通过搜索我确实找到了如何获取字符串中的字符数

srtLen=$(echo -m $str | wc -m)

如果语句是

if [ $strLen -ge 8 ]; then
#make bool var true
fi

但我找不到如何测试并返回一个 bool 值,以确定字符串是否具有小写字母、大写字母和至少一个数字。我不关心每个测试是否是独立的,我想它们会在单独的 if 语句中,这就是为什么我在上面的代码中提到了一个将根据条件设置的 bool 变量。

最佳答案

这是一个适用于非英语语言环境和多字节 UTF-8 字符的通用答案。

让我们将您的每个需求转换为 bash 代码:

  1. $str 至少 8 个字符:这可以使用 bash 内置函数以几种简单的方式完成

    • [ "${#str}"-ge 8 ] && echo "str 至少有 8 个字符"

      直截了当:我们比较$str

    • 的长度
    • [[ "$str"== ????????* ]] && echo "str 至少有 8 个字符"

      $str 根据匹配至少 8 个字符的模式进行检查

    • [[ "$str"=~ .{8} ]] && echo "str 至少有 8 个字符"

      $str 根据匹配 8 个字符的字符串的正则表达式进行检查

    • [ -n "${str#??????}"] && echo "str 至少有 8 个字符"

      我们在删除前 7 个字符时检查 $str 是否为空(不明显,应避免)

  2. 至少有一个数字:

    • [[ "$str"== *[[:digit:]]* ]] && echo "str 至少有一个数字"

      $str 根据匹配由任意数量字符包围的数字的模式进行检查

    • [[ "$str"=~ [[:digit:]] ]] && echo "str 至少有一个数字"

      $str 根据匹配单个数字的正则表达式进行检查

    • [ -n "${str//[^[:digit:]]}"] && echo "str 至少有一个数字"

      当所有非数字字符被移除时,我们检查$str不为空(不明显,应该避免)

  3. 至少有一个小写字母:

    与数字相同,只需将 [[:digit:]] 替换为 [[:lower:]]

    [[ "$str" == *[[:lower:]]* ]] && echo "str has at least one lowercase letter"
    [[ "$str" =~ [[:lower:]] ]] && echo "str has at least one lowercase letter"
    [ -n "${str//[^[:lower:]]}" ] && echo "str has at least one lowercase letter"
  4. 至少有一个大写字母:

    与数字相同,只需将 [[:digit:]] 替换为 [[:upper:]]

    [[ "$str" == *[[:upper:]]* ]] && echo "str has at least one uppercase letter"
    [[ "$str" =~ [[:upper:]] ]] && echo "str has at least one uppercase letter"
    [ -n "${str//[^[:upper:]]}" ] && echo "str has at least one uppercase letter"

你当然可以结合这四个条件:

$ str='my ßtrÎñ9'
$ if [[ "${#str}" -ge 8 \
&& "$str" =~ [[:digit:]] \
&& "$str" =~ [[:lower:]] \
&& "$str" =~ [[:upper:]] \
]]; then
echo "str is a valid password"
else
echo "str is NOT a valid password"
fi

str is a valid password

关于linux - bash 脚本测试字符串上多个参数的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52791305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com