
我在這裡做錯了什麼?
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
從您的評論來看,您並沒有(完全)自己編寫這段程式碼(?)並且在理解它時遇到一些困難。我不會逐行向您解釋它的作用。對不起。我建議您仔細閱讀網絡,並在出現問題時提出具體問題。一個很好的解釋read
其選項在這裡給出。
bash 程式設計的一般介紹可以在以下位置找到: