
사용자에게 이름, 좋아하는 음식, 현재 날짜를 물어보고 이를 변수 food, date 및 name에 저장한 다음 임의의 비밀번호를 생성하는 bash 스크립트를 만들려고 합니다. 사용자가 비밀번호를 잊어버린 경우 동일한 이름(userrecovery), 좋아하는 음식(foodrecovery), 비밀번호가 생성된 날짜(daterecovery)를 입력하기만 하면 비밀번호가 표시됩니다. 무작위 비밀번호를 생성하는 데 사용하는 코드는 다음과 같습니다.
choose() { echo ${1:RANDOM%${#1}:1} $RANDOM; }
pass="$({ choose '!@#$%^\&'
choose '0123456789'
choose 'abcdefghijklmnopqrstuvwxyz'
choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
do
choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
done
} | sort -R | awk '{printf "%s",$1}')"
나는 비슷한 것을 시도했습니다 :
if [ $food=$foodrecovery -a $date=$daterecovery -a.... ]
echo $pass
이것은 작동하지만 스크립트를 닫았다가 다시 열면 생성해서는 안되는 새 비밀번호가 생성됩니다.
답변1
스크립트는 실행될 때마다 pass
실행됩니다 . 당신이 했던 것처럼 그것을 함수로 포장해야 합니다 choose()
. 예를 들어:
genpass()
{
pass="$({ choose '!@#$%^\&'
choose '0123456789'
choose 'abcdefghijklmnopqrstuvwxyz'
choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
do
choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
done
} | sort -R | awk '{printf "%s",$1}')"
echo "${pass}"
}
또 다른 메모;
$RANDOM
피해야한다 (인용하다) 비밀번호 및 암호화 키 생성을 위한 것입니다.
다음은 더 간단하고 더 암호화되어 있습니다.
choose(){ echo "$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)" }