パスワードジェネレータの問題bashスクリプト

パスワードジェネレータの問題bashスクリプト

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

おすすめ記事