2013-07-31 2 views
2

암호를 생성하기 위해 지정된 길이가 유효한지 확인하기 위해 도우미 함수를 만들었습니다. 8-64 범위를 정규식으로 검사하려면 조건부로 변환하려면 어떻게해야합니까?Bash를 사용하여 정규식을 사용하여 범위를 확인하십시오.

# Check to see if password length is valid 
# @param $1 length specified by the user 
# @return True (0) if not valid, False (1) if we're okay 
# Usage: if is_valid "$length" 
is_valid() { 
    local length="$1" 

    if (("$length" < 8 || "$length" > 64)); then 
    return 0 
    else 
    return 1 
    fi 
} 
+0

'^. {8, 64} $'그 것처럼 간단합니다. – HamZa

+0

이렇게 변수에 캡슐화 할 수 있습니까? 'match = "^. {8,64} $"'@HamZa – theGrayFox

+0

저는 bash에 익숙하지 않아서 정규 표현식을 주석으로 게시했습니다 : p – HamZa

답변

2

로 변경해야 할 수 있습니다

function is_valid() { 
    [[ $1 == @([8-9]|[1-5][0-9]|[6][0-4]) ]] 
} 

정규식이 유사하다 :

function is_valid() { 
    [[ $1 =~ ^([8-9]|[1-5][0-9]|[6][0-4])$ ]] 
} 
나는 일반보다는 그 중 하나가 더 읽기 찾을 수없는

function is_valid() { 
    ((8 <= $1 && $1 <= 64)) 
} 

ifreturn은 필요하지 않습니다.

+0

나는 그 트릭을 돌아 오는 데 너무 익숙하다. 나는 C 배경을 가지고있다. 나는 단지''[''로 충분할 것임을 알지 못했다. 정규 표현식 함자가 왜 네가하는 것처럼 날 일시키지 않았 니? 나는 그 패턴이 그렇게 길지 않을 것이라고 생각했다. – theGrayFox

+0

@ user520720 : Hamza의 정규 표현식은 길이가 8 ~ 64이지만 길이가 아닌 문자열을 찾습니다. – choroba

+0

나는 그것을 얻었고, 당신이 생각하는 것을 말해 줄 것이라고 생각한다 :'[[! $ length = ~ ([8-9] | 1 [0-5]) $]]' – theGrayFox

1

사용

local length=${#1} 
if [ $length -lt 8 ] || [ $length -gt 64 ]; then 

보다는 매개 변수로 길이를 수용. 이렇게하면 사용자가 추가 입력을하지 않아도 암호 길이를 계산할 수 있습니다. 하지만 정말로 RegEx를 사용하려면 HamZa의 정규식이 옳습니다. 나는 그것이 변수에 배치 할 수 있다고 생각하지만 당신은 당신이 대신 정규식의 일치 정상적인 패턴을 사용할 수 있습니다

"^.{8,64}\$" 
+0

의견을 보내 주셔서 감사합니다. – theGrayFox

+0

extglob는 일반 표현식에는 영향을 미치지 않지만 확장 된 glob 패턴에는 영향을 미치지 않습니다. – choroba

+0

@ chorob 그래서 grep -e에 영향을 미치지 않을까요? – Ali

관련 문제