(Variable incorrecta: Línea 36) ¡Por favor ayuda!

(Variable incorrecta: Línea 36) ¡Por favor ayuda!

¿Qué he hecho mal aquí? Porque cuando ejecuto mi script y lo detengo después de configurar la variable, dice que tengo una variable incorrecta.

qmail.script: 36: read: : bad variable name. 

La ayuda sería muy apreciada.

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

Respuesta1

Supongo que no estás mostrando todo el código, al igual que line 36la readdeclaración del fragmento que publicaste.

La readafirmación es errónea. En mi humilde opinión te refieres

read -p "$PROMPT" -r -s -n1 CHAR
  • $PROMPTes el parámetro para -p, ya sea imprimiendo un '*' o nada en la entrada.
  • -nTambién necesita un parámetro que indique cuántos caracteres leer a la vez.
  • La variable $CHARse usa más tarde, pero nunca es asignada porread

También $PASSWORDcontendrá solo el último carácter, ya que olvidó concatenar: PASSWORD=$CHARdebería ser más bien

PASSWORD+=$CHAR

o

PASSWORD=${PASSWORD}${CHAR}

Con estas correcciones, el código hace lo que creo que debe hacer: presentar una solicitud de contraseña "destacada".


Solicite aquí el fragmento de código completo y corregido

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

A juzgar por su comentario, usted no escribió este código usted mismo (en su totalidad) (?) y tiene problemas para entenderlo. No te explicaré línea por línea lo que hace. Lo siento. Le sugiero que lea la web y regrese con preguntas específicas si surgen. Una buena explicación de readsus opciones es, por ejemplo.dado aquí.

Las introducciones generales a la programación bash se pueden encontrar, por ejemplo, en

información relacionada