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

2 行目が間違っています。正しくは次のようになります。

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

15 行目と 22 行目の二重引用符を""1 つに縮小します。"

追伸:pwgenまたは を使用してくださいapg。車輪の再発明はしないでください。

関連情報