Shell 命令行,實現一個獲取任意位數的隨機密碼的腳本
每次我們想要獲得一個密碼的時候都很頭疼,于是我之前自己用nodejs寫了一個 Shell 腳本。這兩天在學習 bash Shell 所以,想用同樣的邏輯實現一個獲取任意位數隨機密碼的腳本。
我成功了 :)
分析問題
我們假設我們需要的密碼是大小寫字母以及數字的組合,并且剔除掉 1,l,0,O,o 這些不便于認知的字符。
然后隨機的讀取其中的字符,組合成一個我們需要的密碼,最后輸出。
理順了邏輯之后,我想到有下面的知識點是我之前不是很熟悉的。不過沒關系,善用搜索引擎,這些問題都能解決
- 任意位數,所以需要接受傳參
- 如果沒有傳參,則要給一個默認值
- 需要實現隨機數效果
- 字符串追加,這個倒是蠻簡單的
- 獲取字符串中指定位數的字符
- 數字向上取整
實現代碼
最終代碼如下:
#!/bin/bash
# 如果得到參數 則將得到的參數作為密碼的位數,否則指定密碼位數為8
if [ -n "$1" ]; then length=$1;
else length=8; fi
# 設定可以作為密碼的字符串
chars='abcdefghijkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789'
# 獲取上面的字符串的長度,其實可以直接數一下,這不是練一下 shell 嘛
charsLength=`echo $chars | wc -m | sed 's/^[ \t]*//g'`
# 初始的為空
pw=''
# 根據所需密碼長度進行循環
for ((i=0;i$length;i++));do
# 取得一個隨機數
# $RANDOM 是獲取一個小于 32767 的隨機數
# 所以除以 32767 就可以得到一個 0 - 1 之間的隨機小數
r=`echo $RANDOM/32767 | bc -l`
# 根據隨機數*字符長度取得一個數字
num=`echo $r*$charsLength | bc`
# 將取得數字向上取整,并在字符串中截取對應位置的字符
w=`echo $chars | cut -c$((${num//.*/+1}))`
# 字符追加到 pw 這個變量
pw=$pw$w
done
# 輸出我們想要的密碼
echo $pw
運行一下,果然得到了我們想要的結果。
將這個命令作為一個系統命令,可以隨時執行
- 我們在 ~目錄下面新建一個 .bin 的文件夾
- 將 ~/.bin 設置為環境變量
- 然后將此腳本放到改文件夾下面,并命名為 getpass
- chmod +x getpass 添加可執行權限
然后我們就可以隨時輸出這個命令,來得到我們想要的密碼了。
將 ~/.bin 設置為環境變量
cd ~
mkdir .bin
vim .bash_profile
在 .bash_profile 文件中添加
export PATH="$PATH:~/.bin"
其他不說了,學習 shell 的話,一些基本的命令應該是沒有問題的。
以上腳本均在 mac 下測試通過,在 Linux 下可能會有稍許不同。
如有疑問請留言,或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:- Shell創建用戶并生成隨機密碼腳本分享
- PowerShell生成隨機密碼的方法
- Shell腳本生成隨機密碼的若干種可能