¿Cómo guardo tres entradas en un archivo con el mismo nombre que el usuario?

¿Cómo guardo tres entradas en un archivo con el mismo nombre que el usuario?
#!/bin/bash                                                                     
while :                                                                         
        do                                                                      
        echo "Please enter your tittle:"                                        
        read TITTLE                                                             
        echo "Please enter your surname:"                                       
        read SURNAME                                                            
        echo "Please enter your ID No."                                         
        read ID                                                                 

        if [ "$TITTLE" = "" ] || [ "${TITTLE//[!0-9]}" != "" ];                 
        then                                                                    
        echo "Enter your valid tittle without special characters."              
        echo "Please try again."                                                
        continue                                                                  
        fi                                                                      

        if [ "$SURNAME" = "" ] || [ "${SURNAME//[!0-9]}" != "" ];               
        then                                                                    
        echo "Enter your valid surname without special characters."             
        echo "Please try again."                                                
        continue                                                                  
        fi                                                                      

        if [ "$ID" = "" ] || [ "${ID//[0-9]}" != "" ];                          
        then                                                                    
        echo "Enter your valid ID No. without special characters."              
        echo "Please try again"

        else                                                                    
        echo "Thank you" $TITTLE $SURNAME                                       
        break                                                                   
fi                                                                              
done

Respuesta1

Supuesto: $SURNAMEes el nombre de usuario

Para escribir el contenido de $TITTLEy $SURNAMEen $IDun archivo con el nombre del contenido de $SURNAME, puede modificar su código de la siguiente manera:

...
    else
    echo "Thank you $TITTLE $SURNAME, your information will be stored in \"$SURNAME.txt\""
    echo -e "$TITTLE\n$SURNAME\n$ID" > "$SURNAME.txt"
    break
...

por lo que -e permite que echo se reconozca \ncomo 'nueva línea'.

Respuesta2

Como escribí en mi respuesta a la pregunta relacionada "Script que valida 3 entradas", la salida del script puede ser redirigida por

$ ./script.sh >"$USER.txt"

donde $USERserá reemplazado por su nombre de usuario (esta variable, al igual que $LOGNAME, generalmente la configura el shell o el sistema como su nombre de usuario).

Si desea utilizar el apellido leído por el script, cambie la línea

echo "Thank you" $TITTLE $SURNAME          

en

echo "Thank you $TITTLE $SURNAME" >"$SURNAME.txt"

Esto redirigiría el resultado de echoa un archivo cuyo nombre viene dado por lo que el usuario ingresó como apellido, agregado .txtal final del nombre del archivo (esto es opcional, obviamente). Tenga en cuenta que no se comprueba si esto sobrescribe un archivo existente.

Para enviar esto también al terminal, duplique los datos con tee:

echo "Thank you $TITTLE $SURNAME" | tee "$SURNAME.txt"

Para enviar los tres bits de datos al archivo, use, por ejemplo,

{
    printf 'ID = %s\n' "$ID"
    printf 'surname = %s\n' "$SURNAME"
    printf 'title = %s\s' "$TITTLE"
} >"$SURNAME.txt"

Agrupar un conjunto de comandos dentro de llaves como este le permite redirigir toda la salida del grupo en una sola redirección.

Ver "¿Por qué printf es mejor que echo?" por eso tiendo a usar printfen lugar de echocuando imprimo cadenas variables.

información relacionada