if文(実践)
前回は
if文の
使い方を学んだね!
今回は
if文を使った
シェルスクリプトを書いて
実際にどのようなものか
学んでいこう!
今回はパスワード強度をチェックする
check-passwd スクリプトを
作ってみよう!
おお!
本格的な内容そう!
以下でエディタを開いてね
vim check-passwd
うん!準備万端だよ!
内容は以下のようにしよう
#!/bin/bash
echo -n "パスワードを入力して下さい: "
read -s PASSWORD
if [ "$(echo -n "$PASSWORD" | wc -m)" -lt 8 ]
then
echo "パスワードは8文字以上にしましょう"
elif [ -z "$(tr -cd a-z <<< "$PASSWORD")" ]
then
echo "パスワードには英小文字を含めましょう"
elif [ -z "$(tr -cd A-Z <<< "$PASSWORD")" ]
then
echo "パスワードには英大文字を含めましょう"
elif [ -z "$(tr -cd 0-9 <<< "$PASSWORD")" ]
then
echo "パスワードには英数字を含めましょう"
else
echo "良いパスワードです!"
fi
スクリプトの内容を見てみよう
if文の前まではどういう動きをするのかな?echo -n "パスワードを入力して下さい: "
read -s PASSWORD
これは
read でパスワード入力を求めているよ!ただし -s オプションで入力を画面表示しないようになっているね入力されたパスワードを覗き見されるのを防いでくれているんだ!また
read でカーソルがあるだけだとユーザは何をしていいのかわからないのでecho で入力を促すメッセージを表示してユーザがパスワード入力すれば良いことを伝えているね!そのとおりだね!ここは
read のおさらいのような感じだね次は
if文の中に入っていこう最初のコマンドは何をしているのかな?[ "$(echo -n "$PASSWORD" | wc -m)" -lt 8 ]
むっ…これはちょっと読み解くのが難しいかも
こういうときは分解して考えよう
[ "$( ... )" -lt 8 ] と考えてコマンド展開 $( ... ) の部分は後回しで考えよう!なるほど!コマンド展開 「コマンド展開の結果が8より小さければ」 と読めるね
$( ... ) を考えいないようにするとその後にコマンド展開の内容を分けて考えればいいんだ!
read で受け取ったPASSWORD 変数の値をecho で表示してそれを wc に渡して文字数を数えているねこれは入力されたパスワードの文字数を表示している処理になると思うよ!まとめると「入力されたパスワード文字数が8より小さければ」 という判定処理をしているんだね!
よくできました!そのとおりの処理になっているよ
この判定処理が成功したら「パスワードは8文字以上にしましょう」 と表示するんだね!
次は
elif のコマンドを読んでみよう![ -z "$(tr -cd a-z <<< "$PASSWORD")" ]
これも最初はコマンド展開の部分を考えないようにするね
それなら…「コマンド展開の結果が空文字なら」 という判定処理になっているよ!
コマンド展開の中身を見ると
tr で文字列の加工をするのかな加工内容はヒアドストリング <<< でPASSWORD 変数の値を入力しているねtr の -c, -d オプションと a-z 引数でa-z)以外の文字を削除」以上を合わせると「パスワードから英小文字以外を削除して0文字だったら」 もっとわかりやすく言い換えると「パスワードに英小文字が含まれていなかったら」 という判定処理なっているんだ!
難しかったけど良く読めたね!そのとおりだよ!
この判定処理が成功したら「パスワードには英小文字を含めましょう」 と表示してくれるというわけなんだね!
後に続いている「英大文字( や 「英数字( で 同じようなことをしているだけなんだ
elif のコマンドもA-Z)」0-9)」最後は
else の処理だねecho "良いパスワードです!"
最後の
else に到達するということは今までの悪いパスワードの条件判定が失敗つまり全て当てはまらなかった場合に実行される処理だよここまで到達したら「良いパスワードです!」と 合格がもらえるんだね!
よくできました!
このパスワード合格の条件って結構厳しくないかな?
これは自分のシェルスクリプトなんだもし自分に合わないと思う所あれば好きなように書き換えてもいいんだよ
そっか!
こうやって学びながら自分好みにカスタマイズするのも良い勉強になるから条件を変えたりメッセージを工夫したりして自分だけのオリジナルのスクリプトを作ってみるといいよ!
今回の例題はハードだったけどとても勉強になったよ!
お兄ちゃんの言うとおりこれを元に色々書き換えて試してみる!