%20%E5%8A%A9%E3%81%91%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84!.png)
ここで何を間違えたのでしょうか?スクリプトを実行して変数を設定した後に停止すると、変数が間違っていると表示されます。
qmail.script: 36: read: : bad variable name.
ご協力いただければ幸いです。
unset PASSWORD
unset CHARCOUNT
echo
echo -n "Please Enter a Password For VqAdmin, Roundcube and QmailAdmin.
Password: "
stty echo
CHARCOUNT=0
while IFS= read "$PROMPT" -p -r -s -n
do
#Enter - accept password
if [[ $CHAR == $'\0' ]] ; then
break
fi
#Backspace
if [[ $CHAR == $'\177' ]] ; then
if [ $CHARCOUNT -gt 0 ] ; then
CHARCOUNT=$((CHARCOUNT-1))
PROMPT=$'\b \b'
PASSWORD="${PASSWORD%?}"
else
PROMPT=''
fi
else
CHARCOUNT=$((CHARCOUNT+1))
PROMPT='*'
PASSWORD=$CHAR
fi
done
stty echo
答え1
コード全体を表示していないので、line 36
実際にはread
投稿したスニペットからのステートメントのみが表示されています。
そのread
発言は間違いです。私の意見では、
read -p "$PROMPT" -r -s -n1 CHAR
$PROMPT
は のパラメータであり-p
、入力時に '*' を出力するか、何も出力しません。-n
一度に読み取る文字数を指定するパラメータも必要です。- この変数は
$CHAR
後で使用されますが、read
また$PASSWORD
、連結を忘れたため、最後の文字のみが含まれますPASSWORD=$CHAR
。
PASSWORD+=$CHAR
または
PASSWORD=${PASSWORD}${CHAR}
これらの修正により、コードは想定どおりの動作を実行します。つまり、「スター付き」パスワード プロンプトを表示します。
リクエストに応じて、完全かつ修正されたコードスニペットをここに提供します
unset PASSWORD
unset CHARCOUNT
echo
echo -n "Please Enter a Password For VqAdmin, Roundcube and QmailAdmin.
Password: "
stty echo
CHARCOUNT=0
while IFS= read -p "$PROMPT" -r -s -n1 CHAR
do
#Enter - accept password
if [[ $CHAR == $'\0' ]] ; then
break
fi
#Backspace
if [[ $CHAR == $'\177' ]] ; then
if [ $CHARCOUNT -gt 0 ] ; then
CHARCOUNT=$((CHARCOUNT-1))
PROMPT=$'\b \b'
PASSWORD="${PASSWORD%?}"
else
PROMPT=''
fi
else
CHARCOUNT=$((CHARCOUNT+1))
PROMPT='*'
PASSWORD+=$CHAR
fi
done
あなたのコメントから判断すると、あなたはこのコードを(完全に)自分で書いたわけではないようです(?)ので、理解するのに苦労しています。それが何をするのかを1行ずつ説明することはしません。申し訳ありません。Webで調べて、何か疑問が生じたら具体的な質問をして戻ってくることをお勧めします。read
とそのオプションの適切な説明は、たとえば次のとおりです。ここで与えられた。
bashプログラミングの一般的な入門書は、例えば以下にあります。