Bash: shuf 명령 및 문자 수에서 정수 표현식이 필요합니다.

Bash: shuf 명령 및 문자 수에서 정수 표현식이 필요합니다.

그래서 특정 기준에 따라 임의의 비밀번호를 생성하는 스크립트를 만들려고 하는데 어떤 이유로 정수 값 중 일부가 표시되지 않습니다. 스크립트는 다음과 같습니다.

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

내가 받는 오류 메시지는 다음과 같습니다.

15행: [: : 정수 표현식이 필요합니다.

22행: [: : 정수 표현식이 필요합니다.

답변1

두 번째 줄이 잘못되었습니다. 그것은해야한다:

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

15번과 22번 줄에서 큰따옴표를 ""하나로 줄입니다."

추신: pwgen또는 를 사용하고 apg바퀴를 재발명하지 마세요.

관련 정보