三个可选参数:
-h:显示帮助信息
-l:指定生成的密码长度(默认16-24位随机)
-n:指定要生成的密码个数(默认为1)
#!/bin/bash
# 处理输入参数
while getopts ":l:n:h" opt; do
case ${opt} in
l ) length=$OPTARG ;; # 如果输入了-l参数,将其值赋给变量length
n ) count=$OPTARG ;; # 如果输入了-n参数,将其值赋给变量count
h )
echo "用法: generate_password.sh [选项]"
echo "选项:"
echo " -l <长度> 指定生成的密码长度"
echo " -n <个数> 指定要生成的密码个数 (默认为1)"
echo " -h 显示帮助信息"
exit ;;
\? ) echo "无效选项: -$OPTARG" 1>&2; exit 1 ;; # 如果输入了无效的选项,输出错误信息并退出
: ) echo "选项 -$OPTARG 需要一个参数." 1>&2; exit 1 ;; # 如果选项需要参数但未提供,输出错误信息并退出
esac
done
# 如果未提供生成个数参数,则默认生成1个密码
if [[ -z "$count" ]]; then
count=1
fi
# 定义包含字符的字符串
characters="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
# 循环生成指定个数的随机密码
for ((i=1; i<=$count; i++)); do # 循环从1到$count,每次迭代生成一个密码
# 如果未提供长度参数,则生成随机长度
if [[ -z "$length" ]]; then # 如果未提供长度参数
length=$(( RANDOM % 7 + 18 )) # 生成一个随机长度,范围在18到24之间
fi
# 生成随机密码
password=$(cat /dev/urandom | tr -dc "$characters" | fold -w "$length" | head -n 1) # 生成随机密码,使用/dev/urandom作为随机源,指定的字符集,指定长度,并取第一行作为密码
# 输出密码
echo "生成的随机密码 $i: $password" # 输出生成的密码和序号
done
-h参数结果
test/script# sh generate_password.sh -h
用法: generate_password.sh [选项]
选项:
-l <长度> 指定生成的密码长度
-n <个数> 指定要生成的密码个数 (默认为1)
-h 显示帮助信息
不加参数结果
test/script# sh generate_password.sh
生成的随机密码 1: A7c89Q5yQad3JHshDk
test/script# sh generate_password.sh
生成的随机密码 1: YKK5T7gnCMdKnVpvftlv0
test/script# sh generate_password.sh
生成的随机密码 1: RTkWqeYyZAp0nWlz0rOpN
test/script# sh generate_password.sh
生成的随机密码 1: 9mW6HrP0G572FCqSUMuMgbhb
test/script# sh generate_password.sh
生成的随机密码 1: 7G3pxHhpybioy1FZF8hyTHXx
test/script# sh generate_password.sh
生成的随机密码 1: eko2L8gFnoS9kj9t65IBDZWL
-n参数结果
/script# sh generate_password.sh -n 5
生成的随机密码 1: jJ1CeGapJGuj9sjMSA
生成的随机密码 2: f9Szbk94oR7p0O7f1t
生成的随机密码 3: L7Wn7B2Qkye66Pzqsp
生成的随机密码 4: vcKHNjcJ9onEntdXm7
生成的随机密码 5: 9QjI6KCeel8Bc2qFP2
-l -n 参数结果
/script# sh generate_password.sh -l 23 -n 5
生成的随机密码 1: 7yI34gZdafFpqWaNdQi2eAp
生成的随机密码 2: FhRg7C5LWBi3PLPUmhNJ4OK
生成的随机密码 3: jyIVsltGOftgB6xl3cc9v8O
生成的随机密码 4: S9KFGsDubXnMNJ9ZMXoWRi3
生成的随机密码 5: gl0djzGjJ04uHIFa2WQSerx