Bash 파일 내부의 내용은 난독화됩니다.
echo "Enter The Login Name:"
read username
echo "Enter The Password:"
read password
if [[ $username == "user" && $password == "password" ]]
then
echo -e "You're Logged In\n"
elif [ $username != "user" ]
then
echo -e "Invalid User Name\n"
else
echo -e "Invalid Password\n"
fi
답변1
댓글 중 하나는 다음과 같습니다.
사용자 이름과 비밀번호가 포함된 텍스트 파일을 만듭니다. 그리고 루프를 통해 파일에서 확인하십시오.
괜찮은 아이디어입니다. 코드는 다음과 같을 수 있습니다.
#!/bin/bash
function validate {
local user pass
while IFS=' ' read -r user pass; do
[ "$1" = "$user" ] && [ "$2" = "$pass" ] && return 0
done </the/file
return 1
}
read -rp "Login: " u
read -rsp "Password: " p
echo
if validate "$u" "$p"; then
echo "Access granted."
else
echo "Access denied."
fi
예 /the/file
:
kamil foo
joe bar
anotherUser pa$$word
bill password that contains spaces
줄의 첫 번째 공백 이후의 모든 내용은 비밀번호입니다.
노트:
- 이 작업은 기능 없이 수행될 수 있습니다. 이 함수는
return 0
추가 논리 없이 루프 중간에서 성공할 수 있기 때문에 여기에서 매우 유용합니다 . - 빈 줄은 빈 로그인과 빈 비밀번호를 의미합니다. *nix에서 텍스트 파일의 모든 줄은 개행 문자로 끝나야 합니다. 따라서 파일 맨 끝에 개행 문자가 있다고 해서 그 뒤에 빈 줄이 있다는 의미는 아닙니다. 그래도 끝에 정말 빈 줄을 넣는 것은 꽤 쉬우므로 주의하세요. 또는 빈 로그인이 허용되지 않도록 함수에 일부 논리를 추가할 수 있습니다.
- 오류 없이 이 코드를 실행하려면 에 대한 읽기 액세스 권한이 필요합니다
/the/file
. 하지만 그렇게 한다면 파일을 읽고 모든 비밀을 알 수 있습니다. 여기서는 이 문제를 해결하지 않겠습니다. 안전한 방식으로 비밀번호를 저장하는 것은 질문의 범위를 벗어납니다. 쉘 파일 자체에 비밀번호를 포함시키려면 다음을 사용하십시오.여기 문서. 다음과 같이 하는 대신
done </the/file
:done <<'EOF' kamil foo joe bar anotherUser pa$$word bill password that contains spaces EOF
첫 번째 인용이
EOF
중요합니다. 그것이 없으면$$
확장될 것이다.