aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xmakepass.bash13
-rwxr-xr-xmakepass.sh20
2 files changed, 18 insertions, 15 deletions
diff --git a/makepass.bash b/makepass.bash
index 04d4f49..c2edf82 100755
--- a/makepass.bash
+++ b/makepass.bash
@@ -21,19 +21,21 @@ function makepass {
MAKEPASS_WORDLIST=${MAKEPASS_WORDLIST:-/usr/share/dict/words}
# if $l is not a number, then exit
[[ ! $l =~ ^[0-9]+$ ]] && [[ ! "$l" == "" ]] && echo "not a number" && return 1
+ (( l <= 1 || l > 255 )) && echo "Argument must be between 0 and 255" && return 1
# if $1 is actually empty, set $l to random value for each output
+
echo "Normal passwords:"
- for i in {1..10}; do
+ for _ in {1..10}; do
[ "$1" = "" ] && l=$(shuf -i 8-44 -n 1)
- head -n10 /dev/urandom | tr -dc _A-Z-a-z-0-9 | cut -c-${1:-$l};
+ head -n10 /dev/urandom | tr -dc _A-Z-a-z-0-9 | cut -c-"${1:-$l}";
done | column
echo ""
echo "Passwords with special characters:"
- for i in {1..6}; do
+ for _ in {1..6}; do
[ "$1" = "" ] && l=$(shuf -i 16-64 -n 1)
first=$(head -n10 /dev/urandom | tr -dc A-Za-z | cut -c-1)
- words=$(head -n10 /dev/urandom | tr -dc '!#$%&/()=?+-_,.;:<>[]{}|\@*^A-Z-a-z-0-9' | cut -c-${1:-$l})
+ words=$(head -n10 /dev/urandom | tr -dc '!#$%&/()=?+-_,.;:<>[]{}|\@*^A-Z-a-z-0-9' | cut -c-"${1:-$l}")
last=$(head -n10 /dev/urandom | tr -dc A-Za-z | cut -c-1)
echo "${first}${words}${last}"
done | column
@@ -42,7 +44,7 @@ function makepass {
echo ""
echo "Passphrases:"
- for i in {1..5}; do
+ for _ in {1..5}; do
words=$(shuf -n 8 "${MAKEPASS_WORDLIST}" | tr '\n' '-' | tr -dc '_A-Z-a-z-0-9')
echo "${words:0:-1}"
done;
@@ -52,4 +54,3 @@ function makepass {
makepass "${@:-}"
## END OF FILE #################################################################
-# vim:syntax=bash filetype=bash
diff --git a/makepass.sh b/makepass.sh
index 3af6830..bb56aef 100755
--- a/makepass.sh
+++ b/makepass.sh
@@ -21,9 +21,11 @@ makepass() {
# We only take one argument
[ "$#" -gt 1 ] && printf '%s\n' 'only one argument' && return 1
- # if $1 is not empty and is not a number
- if [ ! -z "$1" ] && ! printf '%d' "$1" >/dev/null 2>&1; then printf '%s\n' 'not a number' && return 1; fi
- if [ ! -z "$1" ] && [ ! ${1:-0} -gt 0 ]; then printf '%s\n' 'not a number above 0'; return 1; fi
+ # check if $1 is a number or whatnot
+ if [ -n "$1" ]; then
+ if ! printf '%d' "$1" >/dev/null 2>&1; then printf '%s\n' 'not a number' && return 1; fi
+ if [ "$1" -le 0 ] || [ "$1" -ge 255 ]; then printf '%s\n' 'not a number above 0'; return 1; fi
+ fi
# Go!
len=$1
@@ -31,7 +33,7 @@ makepass() {
printf '%s\n' 'Normal passwords:'
i=0
while [ $i -lt 10 ]; do
- _random "${len:-}" '_A-Z-a-z-0-9' true
+ _random "${len:-}" 'A-Z-a-z-0-9_-' true
i=$((i + 1))
done | column
printf '\n'
@@ -46,7 +48,7 @@ makepass() {
if [ -r "${MAKEPASS_WORDLIST}" ]; then
printf '\n'
printf '%s\n' 'Passphrases:'
- lines=$(wc -l < ${MAKEPASS_WORDLIST})
+ lines=$(wc -l < "${MAKEPASS_WORDLIST}")
i=0
while [ $i -lt 5 ]; do
# shuf is the best solution here, but it is very much not portable.
@@ -54,7 +56,7 @@ makepass() {
words=""
j=0
while [ $j -lt 8 ]; do
- words="${words}-$(sed -n $(($(_RANDOM) % $lines + 1))p "${MAKEPASS_WORDLIST}" | tr -dc '_A-Z-a-z-0-9')"
+ words="${words}-$(sed -n $(($(_RANDOM) % lines + 1))p "${MAKEPASS_WORDLIST}" | tr -dc 'A-Z-a-z-0-9_-')"
j=$((j + 1))
done
printf '%s\n' "${words#-}"
@@ -89,15 +91,15 @@ _random() (
fla=${3:-'false'}
if [ "$fla" = "true" ]; then
- if [ $len -le 2 ]; then
- string="$(head -n 10 /dev/urandom | tr -cd '[:alpha:]' | tail -c $len)"
+ if [ "$len" -le 2 ]; then
+ string="$(head -n 10 /dev/urandom | tr -cd '[:alpha:]' | tail -c "$len")"
else
string="$(head -n 10 /dev/urandom | tr -cd '[:alpha:]' | tail -c 1)"
string="${string}$(head -n 100 /dev/urandom | tr -cd "$chars" | tail -c $((len-2)))"
string="${string}$(head -n 10 /dev/urandom | tr -cd '[:alpha:]' | tail -c 1)"
fi
else
- string="$(head -n 100 /dev/urandom | tr -cd "$chars" | tail -c $len)"
+ string="$(head -n 100 /dev/urandom | tr -cd "$chars" | tail -c "$len")"
fi
printf '%s\n' "$string"