- ベストアンサー
ランダムパスワード作成時に間違えやすい文字を避ける
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文字だけ出力する方法はありますでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>いただいた内容だと何度実行してもパスワードは表示されませんでした。 いや、そりゃ、表示させる部分まで書いてませんから。 8文字で生成されたパスワードが $PW に入ってますので、echo $PW で表示できます。 パスワードを扱う処理と言うことは、大事な処理のはずなので、見よう見まねというか、意味もわからずコピペで動かすのじゃなくて、読んで意味がわかる程度までは勉強したほうがいいでしょうね。
その他の回答 (1)
- notnot
- ベストアンサー率47% (4900/10358)
>これでは8文字だった時にループし続けてしまうので、 そう書いてますよね。whileは条件が真ならループします。 >8文字だった時はその8文字だけ出力する方法はありますでしょうか。 8文字じゃなかったときはどうするんですか? 書かれているスクリプトを見ると、どういう処理にしたいのかさっぱり伝わりません。 単に、 「パスワードを生成してoO01l9qが含まれていたらやり直す」 という処理でいいのでは? while PW=`mkpasswd -s 0 -l 8` echo "$PW" | grep -q '[oO01l9q]' do : done
お礼
ありがとうございます。 8文字じゃなかったら再度mkpasswdにて ランダムパスワードを生成する ということにしたいのです。 oO01l9qが含まれていない8文字のランダムパスワードを 生成したいのです。いただいた内容だと何度実行しても パスワードは表示されませんでした。 途中でbraekを入れてみてもうまくいきませんでした。 どうしたらよいでしょうか
お礼
できました!! すごい。。まだまだ理解しきれていません。 勉強します。 お時間あれば下記の部分にご指摘、赤入れをお願いします。 ----------------------------------------------------------- #繰り返しコマンド実行 while PW=`mkpasswd -s 0 -l 8` #PWを表示させ、該当文字があればゼロを返す echo "$PW" | grep -q '[oO01liI9q]' #繰り返す? do : done #結果表示 echo $PW -------------------------------------------------------- doとdoneの間にコマンドがあればなんとなくわかるのですが。 do : done としていてかつ、whileの後にコマンドを記述していると 「ゼロ」以外のステータスがでるまで whileからdo:の行の間を繰り返し実行するという事になるんですかね。 それでつじつまがあうのだと思います。 出来たので良いのですが、理解できてないので、 お時間あったら教えてくださいっ