Shell 命令行,實(shí)現(xiàn)一個(gè)獲取任意位數(shù)的隨機(jī)密碼的腳本
每次我們想要獲得一個(gè)密碼的時(shí)候都很頭疼,于是我之前自己用nodejs寫(xiě)了一個(gè) Shell 腳本。這兩天在學(xué)習(xí) bash Shell 所以,想用同樣的邏輯實(shí)現(xiàn)一個(gè)獲取任意位數(shù)隨機(jī)密碼的腳本。
我成功了 :)
分析問(wèn)題
我們假設(shè)我們需要的密碼是大小寫(xiě)字母以及數(shù)字的組合,并且剔除掉 1,l,0,O,o 這些不便于認(rèn)知的字符。
然后隨機(jī)的讀取其中的字符,組合成一個(gè)我們需要的密碼,最后輸出。
理順了邏輯之后,我想到有下面的知識(shí)點(diǎn)是我之前不是很熟悉的。不過(guò)沒(méi)關(guān)系,善用搜索引擎,這些問(wèn)題都能解決
實(shí)現(xiàn)代碼
最終代碼如下:
#!/bin/bash # 如果得到參數(shù) 則將得到的參數(shù)作為密碼的位數(shù),否則指定密碼位數(shù)為8 if [ -n "$1" ]; then length=$1; else length=8; fi # 設(shè)定可以作為密碼的字符串 chars='abcdefghijkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789' # 獲取上面的字符串的長(zhǎng)度,其實(shí)可以直接數(shù)一下,這不是練一下 shell 嘛 charsLength=`echo $chars | wc -m | sed 's/^[ \t]*//g'` # 初始的為空 pw='' # 根據(jù)所需密碼長(zhǎng)度進(jìn)行循環(huán) for ((i=0;i$length;i++));do # 取得一個(gè)隨機(jī)數(shù) # $RANDOM 是獲取一個(gè)小于 32767 的隨機(jī)數(shù) # 所以除以 32767 就可以得到一個(gè) 0 - 1 之間的隨機(jī)小數(shù) r=`echo $RANDOM/32767 | bc -l` # 根據(jù)隨機(jī)數(shù)*字符長(zhǎng)度取得一個(gè)數(shù)字 num=`echo $r*$charsLength | bc` # 將取得數(shù)字向上取整,并在字符串中截取對(duì)應(yīng)位置的字符 w=`echo $chars | cut -c$((${num//.*/+1}))` # 字符追加到 pw 這個(gè)變量 pw=$pw$w done # 輸出我們想要的密碼 echo $pw
運(yùn)行一下,果然得到了我們想要的結(jié)果。
將這個(gè)命令作為一個(gè)系統(tǒng)命令,可以隨時(shí)執(zhí)行
然后我們就可以隨時(shí)輸出這個(gè)命令,來(lái)得到我們想要的密碼了。
將 ~/.bin 設(shè)置為環(huán)境變量
cd ~ mkdir .bin vim .bash_profile
在 .bash_profile 文件中添加
export PATH="$PATH:~/.bin"
其他不說(shuō)了,學(xué)習(xí) shell 的話,一些基本的命令應(yīng)該是沒(méi)有問(wèn)題的。
以上腳本均在 mac 下測(cè)試通過(guò),在 Linux 下可能會(huì)有稍許不同。
如有疑問(wèn)請(qǐng)留言,或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
標(biāo)簽:新疆 惠州 九江 北京 懷化 亳州 贛州 河南
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Linux Shell 實(shí)現(xiàn)一個(gè)獲取任意位數(shù)的隨機(jī)密碼的腳本》,本文關(guān)鍵詞 詳解,Linux,amp,nbsp,Shell,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。