我应该能够验证文件中的归档红色是否是有效的用户名:
if [ $1 =~ [a-z_][a-z0-9_-]*[$]? ]; then
不允许使用空格,但未检测到,第一个字符仅限于a-z和下划线但是再次检测不到,Fedora的限制为16个字符。 所以修改它是这样的:
GroupeEtUsagerValide() {
if [ ${#1} -gt 16 ];then
return 1
elif [[ $1 =~ ^[[:lower:]_][[:lower:][:digit:]_-]{2,15} ]]; then
return 0
else
return 1
fi
}
检测到空白区域,但现在已经没有了,我必须更改某些内容并找不到它 这是一个函数$ 1是从文件中读取的值
答案 0 :(得分:2)
一些注意事项:
[[ ]]
中提供,而不是[ ]
(在您的第一个代码示例中使用)。if
完全不需要。^
开头$
,它就不会被锚定在所有。您当前的代码最后没有锚点,因此即使这些字符后跟空格,它也会接受至少包含三个有效字符的任何内容。isValidUsername() {
local re='^[[:lower:]_][[:lower:][:digit:]_-]{2,15}$'
(( ${#1} > 16 )) && return 1
[[ $1 =~ $re ]] # return value of this comparison is used for the function
}
要使用它:
testValidUsername() {
if isValidUsername "$1"; then
echo "$1 is a valid username"
else
echo "$1 is not a valid username"
fi
}
testValidUsername abcdefg
testValidUsername 1234567
testValidUsername a123456
testValidUsername 012345678901234567890
...和输出,如预期的那样:
abcdefg is a valid username
1234567 is not a valid username
a123456 is a valid username
012345678901234567890 is not a valid username
答案 1 :(得分:0)
我在开始时非常接近,手册页是正确的,我只是错过了锚点。
if [[ $usager =~ ^[[:lower:]_][[:lower:][:digit:]_-]*[$]?$ ]]; then