제가 만들려는 스크립트는 사용자에게 비밀번호를 요청해야 합니다. 그런 다음 비밀번호에 대문자, 문자 및 숫자가 포함되어 있는지 확인합니다.
길을 잃고 인터넷 검색을 시작하기 전에는 그게 전부였습니다.
#!/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
코드에 몇 가지 문제가 있습니다.
[[
사이에 공간이 있어야합니다.password
password
변수이므로$password
확장형으로 작성해야 합니다.- hashbang을 사용하고 있으므로
#!/bin/sh
bash 확장 테스트([[
)를 사용하지 못할 수 있습니다. - 비밀번호에 숫자가 포함되어 있는지만 확인합니다.
비밀번호가 요구 사항을 충족하는지 확인하고 다음을 제공하는 기능이 있으면 더 좋을 것이라고 생각합니다.
#!/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