Linux - 사용자가 숫자와 문자를 입력했는지 확인

Linux - 사용자가 숫자와 문자를 입력했는지 확인

제가 만들려는 스크립트는 사용자에게 비밀번호를 요청해야 합니다. 그런 다음 비밀번호에 대문자, 문자 및 숫자가 포함되어 있는지 확인합니다.

길을 잃고 인터넷 검색을 시작하기 전에는 그게 전부였습니다.

#!/bin/sh
echo "Please enter a password containing numbers and letters"
read password

if [[password =~ [0-9] ]]
then 
    echo "Successful"
else
    echo "Fail"
fi

답변1

코드에 몇 가지 문제가 있습니다.

  1. [[사이에 공간이 있어야합니다.password
  2. password변수이므로 $password확장형으로 작성해야 합니다.
  3. hashbang을 사용하고 있으므로 #!/bin/shbash 확장 테스트( [[)를 사용하지 못할 수 있습니다.
  4. 비밀번호에 숫자가 포함되어 있는지만 확인합니다.

비밀번호가 요구 사항을 충족하는지 확인하고 다음을 제공하는 기능이 있으면 더 좋을 것이라고 생각합니다.

#!/bin/sh

chk_pass () {
    local pass=$1
    # Check if password contains uppercase
    printf '%s' "$pass" | grep -q '[A-Z]' || return 1
    # Check if password contains lowercase
    printf '%s' "$pass" | grep -q '[a-z]' || return 1
    # Check if password contains numbers
    printf '%s' "$pass" | grep -q '[0-9]' || return 1
    # Check if password contains special characters
    printf '%s' "$pass" | grep -q '[^a-zA-Z0-9 \t]' || return 1
    return 0
}

printf '%s\n' 'Please enter a password containing at least one number, one uppercase letter, one lowercase letter, and one special character: '
read -rs 
if chk_pass "$REPLY"; then
    printf '%s\n' 'Success'
else
    printf '%s\n' 'Error: Password must contain one number, one uppercase letter, one lowercase letter, and one special character!' >&2
fi

노트:

grep함수의 마지막 함수는 실제로 암호에 문자가 포함되어 있는지 확인합니다.밖의영숫자 또는 공백. 읽기 옵션은 백슬래시 문자를 유지합니다.
읽기 옵션은 사용자 입력을 숨깁니다(비밀번호 입력에 유용함).-r
-s

관련 정보