• ベストアンサー

ランダムパスワード作成時に間違えやすい文字を避ける

mkpasswdコマンドを使って8文字のパスワードを生成するでのすが、 見間違えやすいo0i1lなどの文字は使わないようにしたいのです。 sedを使えば簡単に。。。とスクリプトを組み始めたのですが、 なかなかうまくいきません。 PW=` mkpasswd -s 0 -l 8 | sed 's/[oO01l9q]//g' ` while [ `echo $PW |wc -m` -eq 8 ] ; do echo $PW done これでは8文字だった時にループし続けてしまうので、 8文字だった時はその8文字だけ出力する方法はありますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>いただいた内容だと何度実行してもパスワードは表示されませんでした。 いや、そりゃ、表示させる部分まで書いてませんから。 8文字で生成されたパスワードが $PW に入ってますので、echo $PW で表示できます。 パスワードを扱う処理と言うことは、大事な処理のはずなので、見よう見まねというか、意味もわからずコピペで動かすのじゃなくて、読んで意味がわかる程度までは勉強したほうがいいでしょうね。

r-linux
質問者

お礼

できました!! すごい。。まだまだ理解しきれていません。 勉強します。 お時間あれば下記の部分にご指摘、赤入れをお願いします。 ----------------------------------------------------------- #繰り返しコマンド実行 while PW=`mkpasswd -s 0 -l 8` #PWを表示させ、該当文字があればゼロを返す echo "$PW" | grep -q '[oO01liI9q]' #繰り返す? do : done #結果表示 echo $PW -------------------------------------------------------- doとdoneの間にコマンドがあればなんとなくわかるのですが。 do : done としていてかつ、whileの後にコマンドを記述していると 「ゼロ」以外のステータスがでるまで whileからdo:の行の間を繰り返し実行するという事になるんですかね。 それでつじつまがあうのだと思います。 出来たので良いのですが、理解できてないので、 お時間あったら教えてくださいっ

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

>これでは8文字だった時にループし続けてしまうので、 そう書いてますよね。whileは条件が真ならループします。 >8文字だった時はその8文字だけ出力する方法はありますでしょうか。 8文字じゃなかったときはどうするんですか? 書かれているスクリプトを見ると、どういう処理にしたいのかさっぱり伝わりません。 単に、 「パスワードを生成してoO01l9qが含まれていたらやり直す」 という処理でいいのでは? while PW=`mkpasswd -s 0 -l 8` echo "$PW" | grep -q '[oO01l9q]' do : done

r-linux
質問者

お礼

ありがとうございます。 8文字じゃなかったら再度mkpasswdにて ランダムパスワードを生成する ということにしたいのです。 oO01l9qが含まれていない8文字のランダムパスワードを 生成したいのです。いただいた内容だと何度実行しても パスワードは表示されませんでした。 途中でbraekを入れてみてもうまくいきませんでした。 どうしたらよいでしょうか

関連するQ&A