Bash: Expressão inteira esperada do comando shuf e contagem de caracteres

Bash: Expressão inteira esperada do comando shuf e contagem de caracteres

Estou tentando criar um script para gerar uma senha aleatória com determinados critérios, mas por algum motivo alguns dos meus valores inteiros não aparecem como tal. Aqui está o roteiro:

#!/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

As mensagens de erro que estou recebendo são:

linha 15: [:: expressão inteira esperada

linha 22: [:: expressão inteira esperada

Responder1

Sua segunda linha está errada. Deveria ser:

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

e reduza as aspas duplas ""para uma "nas linhas 15 e 22.

ps.: use pwgenou apg, não reinvente a roda.

informação relacionada