commit
5c4861b522
1 changed files with 65 additions and 0 deletions
@ -0,0 +1,65 @@
|
||||
#!/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 |
||||
Loading…
Reference in new issue