Bash: expresión entera esperada del comando shuf y recuento de caracteres

Bash: expresión entera esperada del comando shuf y recuento de caracteres

Así que estoy intentando crear una secuencia de comandos para generar una contraseña aleatoria con ciertos criterios, pero por alguna razón algunos de mis valores enteros no se muestran como tales. Aquí está el guión:

#!/bin/bash
PASSWORDLENGTH= shuf -i 8-16 -n 1
RNDSOURCE=/dev/urandom
L="acdefghjklmnopqrstuvwxyz"
U="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
N="012345679"
S='@#$%&*+-='
ALL="$L$U$N"
function rndindex() { echo $(($RANDOM % ${#1})); }
password="${L:$(rndindex $L):1}${U:$(rndindex $U):1}${N:$(rndindex $N):1}${S:$(rndindex $S):1}"

password=$password${ALL:$(rndindex $S):1}
while [ "${#password}" -lt "$PASSWORDLENGTH"" ]   #Line 15
do
  password=$password${ALL:$(rndindex $ALL):1}
done

chars=$password
password=""
while [ "${#password}" -lt "$PASSWORDLENGTH"" ]   #Line 22
do
  n=$(rndindex $chars)
  ch=${chars:$n:1}
  password="$password$ch"
  if [ $n = $(( ${#chars} - 1 )) ]; then
      chars="${chars:0:$n}"
  elif [ $n = 0 ]; then
      chars="${chars:1}"
  else
      chars="${chars:0:$n}${chars:$((n+1))}"
  fi
done
echo $password

Los mensajes de error que recibo son:

línea 15: [:: expresión entera esperada

línea 22: [:: expresión entera esperada

Respuesta1

Tu segunda línea está equivocada. Debería ser:

PASSWORDLENGTH=$(shuf -i 8-16 -n 1)

y reduzca las comillas dobles ""a una "en las líneas 15 y 22.

PD: usa pwgeno apg, no reinventes la rueda.

información relacionada