Shell编程-随机密码生成
脚本说明
运行脚本后,系统会显示操作菜单,可根据需要生成指定长度和格式的随机密码。
运行效果
效果一:生成指定长度仅数字的随机密码
效果二:生成指定长度仅字母(含大小写)的随机密码
效果三:生成指定长度仅特殊字符的随机密码
效果四:生成指定长度,但数字、字母、特殊字符随机的密码
效果五:生成指定位数数字、字母、特殊字符随机的密码
脚本设计思路
1.生成仅含数字的随机密码
作用:根据输入的密码长度要求,生成随机数字密码
numbers="";
# 生成指定长度的随机数字
function pwForNum() {read -p "请输入密码长度-数字:" length;numbers=$(tr -dc '0-9' < /dev/urandom | fold -w $length | head -n 1)echo $numbers;
}
2.生成仅含字母的随机密码
作用:根据输入的密码长度要求,生成随机字母密码(含大小写)
letters="";
# 生成指定长度的随机字母
function pwForLetter() {read -p "请输入密码长度-字母:" length;letters=$(tr -dc 'a-zA-Z' < /dev/urandom | fold -w $length | head -n 1)echo $letters;
}
3.生成仅含特殊字符的随机密码
作用:根据输入的密码长度要求,生成随机特殊字符密码
special="";
# 生成指定长度的随机特殊字符
function pwForSpecial() {read -p "请输入密码长度-特殊字符:" length;special=$(tr -dc '[:punct:]' < /dev/urandom | fold -w $length | head -n 1)echo $special;
}
4.生成指定位数的随机密码
作用:根据输入的密码长度要求,生成随机密码(可能含字母、数字、特殊字符)
function pwForAll() {read -p "请输入随机密码长度:" length;password=$(tr -dc 'a-zA-Z0-9[:punct:]' < /dev/urandom | fold -w $length | head -n 1)echo $password
}
5.生成指定位数数字、字母、特殊字符的秘密
作用:根据用户指定的数字、字母和特殊字符位数要求生成密码,并对生成的密码进行随机排序后输出。
# 生成指定位数随机密码(含大小写、数字、特殊字符-数量固定)
function pwForAllFixed() {pwForNum;pwForLetter;pwForSpecial;password="${numbers}${letters}${special}"echo $password;password=$(echo "$password" | fold -w1 | shuf | tr -d '\n')echo "生成的随机密码是: $password"
}
6.主函数
作用:用户交互及操作指引
function menu(){echo "1.生成仅数字的密码";echo "2.生成仅字母的密码";echo "3.生成仅特殊字符的密码";echo "4.生成数字、字母、特殊字符的密码(数量随机)";echo "5.生成数字、字母、特殊字符的密码(数量固定)";echo "6.退出";read -p "请输入你的选择:" num;case $num in1 ) pwForNum;;2 ) pwForLetter;;3 ) pwForSpecial;;4 ) pwForAll;;5 ) pwForAllFixed;;6 | * ) exit;;esac
}menu;
脚本完整代码
#!/bin/bashnumbers="";
# 生成指定长度的随机数字
function pwForNum() {read -p "请输入密码长度-数字:" length;numbers=$(tr -dc '0-9' < /dev/urandom | fold -w $length | head -n 1)echo $numbers;
}letters="";
# 生成指定长度的随机字母
function pwForLetter() {read -p "请输入密码长度-字母:" length;letters=$(tr -dc 'a-zA-Z' < /dev/urandom | fold -w $length | head -n 1)echo $letters;
}special="";
# 生成指定长度的随机特殊字符
function pwForSpecial() {read -p "请输入密码长度-特殊字符:" length;special=$(tr -dc '[:punct:]' < /dev/urandom | fold -w $length | head -n 1)echo $special;
}# 生成指定位数随机密码(含大小写、数字、特殊字符-数量随机)
function pwForAll() {read -p "请输入随机密码长度:" length;password=$(tr -dc 'a-zA-Z0-9[:punct:]' < /dev/urandom | fold -w $length | head -n 1)echo $password
}# 生成指定位数随机密码(含大小写、数字、特殊字符-数量固定)
function pwForAllFixed() {pwForNum;pwForLetter;pwForSpecial;password="${numbers}${letters}${special}"echo $password;password=$(echo "$password" | fold -w1 | shuf | tr -d '\n')echo "生成的随机密码是: $password"
}function menu(){echo "1.生成仅数字的密码";echo "2.生成仅字母的密码";echo "3.生成仅特殊字符的密码";echo "4.生成数字、字母、特殊字符的密码(数量随机)";echo "5.生成数字、字母、特殊字符的密码(数量固定)";echo "6.退出";read -p "请输入你的选择:" num;case $num in1 ) pwForNum;;2 ) pwForLetter;;3 ) pwForSpecial;;4 ) pwForAll;;5 ) pwForAllFixed;;6 | * ) exit;;esac
}menu;