Better variable quoting in passwd-gen.sh.
authorW. Trevor King <wking@drexel.edu>
Thu, 8 Dec 2011 16:01:01 +0000 (11:01 -0500)
committerW. Trevor King <wking@drexel.edu>
Thu, 8 Dec 2011 16:01:01 +0000 (11:01 -0500)
With the previous version, the unquoted `SET` passed to `tr` could
cause problems if Bash exapanded it to a filename.  Now everything is
nicely quoted, using braces and everything.  I also use
`${paramter:-word}` for all the configuration variables, which makes
it easy to override them without editing the script.  For example, you
can now run:

  $ DEVICE=/dev/urandom SET="[:alnum:][:punct:]" passwd-gen.sh 10

posts/passwd-gen.mdwn
posts/passwd-gen/passwd-gen.sh

index ddbb71db67b0b2d9fed8619e88111aaa87c7ab77..75918aac9fe0ff1fa18ae636a7a736f93eec944e 100644 (file)
@@ -2,9 +2,11 @@
 passwords of various length and complexity.
 
     $ ./passwd-gen.sh 16
-    NEmXOH2djJvUamdh
+    WYQwDY0fVpfouu6O
     Length of password: 16
-    Total bytes read:   52
+    Total bytes read:   73
+    Device:             /dev/random
+    Set:                [:alnum:]
 
 The script is well commented, so there's not much more to say here...
 
index 5ddc9dee3d921df0ebbc8f26003af01adea5e5bb..cfccc6fa8e33210c6e718cf335a92877309153aa 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright (C) 2008-2010, William Trevor King <wking@drexel.edu>
+# Copyright (C) 2008-2011, William Trevor King <wking@drexel.edu>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # to have lower NC (wastes less usable characters).  For faster
 # DEVICEs, it's better to have a higher NC (fewer slow shell loops).
 
-N=8                       # password length
-NC=4                      # number of characters in a "chunk"
+N="${1:-8}"               # password length
+NC="${NC:-4}"             # number of characters in a "chunk"
 #SET="[:alnum:][:punct:]" # set of allowed characters (see tr(1))
-SET="[:alnum:]"
-DEVICE=/dev/random        # use /dev/urandom for faster, weaker passwords
-
-if [ -n "$1" ]
-then
-    N="$1"
-fi
+SET="${SET:-[:alnum:]}"
+DEVICE="${DEVICE:-/dev/random}" # use /dev/urandom for faster, weaker passwords
 
 NA=0
 PWD=""
-while [ "$N" -gt 0 ]; do
-               ALL=$(head -c "$NC" "$DEVICE")
+while [ "${N}" -gt 0 ]; do
+               ALL=$(head -c "${NC}" "${DEVICE}")
                let "NA = NA + ${#ALL}"
-    NEW=$(echo "$ALL" | tr -d -c $SET | head -c "$N")
-    PWD="$PWD$NEW"
+    NEW=$(echo -E "${ALL}" | tr -d -c "${SET}" | head -c "${N}")
+    PWD="${PWD}${NEW}"
     let "N = N - ${#NEW}"
 done
 
-echo "$PWD"
+echo "${PWD}"
 echo "Length of password: ${#PWD}"
-echo "Total bytes read:   $NA"
+echo "Total bytes read:   ${NA}"
+echo "Device:             ${DEVICE}"
+echo "Set:                ${SET}"
 
 exit 0