You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.3 KiB
65 lines
1.3 KiB
#!/bin/bash |
|
|
|
set -f |
|
|
|
COUNT=10 |
|
MAX=8 |
|
MIN=4 |
|
NUM=4 |
|
CHARS=('!' '@' '#' '$' '%' '^' '&' '*' '(' ')' '{' '}' '[' ']' ':' ';' '/' '?' '>' '<' ',' '.' '=' '-' '_' '+' '~') |
|
LIST='/usr/share/dict/words' |
|
|
|
|
|
|
|
|
|
function gen_pass(){ |
|
|
|
UPPER=0 |
|
( |
|
echo $((RANDOM%99)) |
|
echo $((RANDOM%99)) |
|
i=$NUM |
|
while read word; do |
|
if [ $UPPER -eq 0 ] && [ $((RANDOM % $i)) -eq 0 ]; then |
|
word="$(echo ${word^^})" |
|
UPPER=1 |
|
fi |
|
echo -n $word |
|
echo ${CHARS[$((RANDOM % ${#CHARS[@]}))]} |
|
i=$(( $i - 1 )) |
|
done < <(sed -rn "/^[^']{$MIN,$MAX}$/p" "$LIST" |shuf|tail -${NUM}) |
|
|
|
) |shuf|tr -d '\n' |
|
|
|
} |
|
|
|
function help() { |
|
cat << EOF |
|
Usage: $0 [OPTIONS] |
|
-h, --help Display this text |
|
-c, --count Number of passwords to generate (10) |
|
-M, --max-length Maximum length of words (8) |
|
-m, --min-length Minimum length of words (4) |
|
-n, --number Number of words per password (4) |
|
-l, --word-list Specify a different word list to use (/usr/share/dict/words) |
|
EOF |
|
} |
|
|
|
while [ $1 ]; do |
|
# update the help text when adding new options |
|
case $1 in |
|
-h|--help) help; exit;; |
|
-c|--count) COUNT=$2;shift 2;; |
|
-M|--max-length) MAX=$2;shift 2;; |
|
-m|--min-length) MIN=$2;shift 2;; |
|
-n|--number) NUM=$2;shift 2;; |
|
-l|--word-list) LIST=$2;shift 2;; |
|
*) break;; |
|
esac |
|
done |
|
|
|
for i in $(seq $COUNT); do |
|
echo $(gen_pass) |
|
done |
|
|
|
set +f
|
|
|