ユーザーに名前、好きな食べ物、現在の日付を尋ねて、それを変数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)" }