繁体   English   中英

大写字母的 Bash 脚本检查字符串

[英]Bash script check string for uppercase letter

我正在尝试检查任何大写字母的字符串。 我的代码显示任何输入都没有 UPPER,可能是“sss”、“Sss”、“SSS”

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

[^a-zA-Z0-9]表示除az之外的任何内容,即小写字母, AZ ,即大写字母和0-9 ,即数字。 sssSssSSS Sss包含字母,所以它们不能匹配。

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

如果密码包含任何大写字母,则为真。

您应该在运行此类测试之前设置LC_ALL ,例如

$ 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:]]应该始终有效。

你的正则表达式是错误的。 使用 [AZ] 或 [:upper:]。

https://en.wikipedia.org/wiki/Regular_expression

无论我如何运行这个脚本,我都遇到了问题,直到我将其更改为让我的输入字符串为 $1,然后设置 pass=$1。 我也稍微改变了正则表达式。 我终于可以正常工作的内容如下。 然后我可以运行 bash (script) John 并得到一个有效的响应。 希望这可以帮助。

pass=$1
if [[ "$pass" =~ ^[A-Z] ]]
then
   echo "Upper found"
else
   echo "No Upper"
fi

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM