Wie speichere ich drei Eingaben in einer Datei mit demselben Namen wie der Benutzer?

Wie speichere ich drei Eingaben in einer Datei mit demselben Namen wie der Benutzer?
#!/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

Antwort1

Annahme: $SURNAMEist der Benutzername

Um den Inhalt von in eine Datei zu schreiben , $TITTLEdie nach dem Inhalt von benannt ist , können Sie Ihren Code wie folgt ändern:$SURNAME$ID$SURNAME

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

wobei -e es echo ermöglicht, es \nals „Newline“ zu erkennen.

Antwort2

Wie ich in meiner Antwort auf die entsprechende Frage schrieb:Skript, das 3 Eingaben validiert", kann die Ausgabe des Skripts umgeleitet werden durch

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

wobei $USERdurch Ihren Benutzernamen ersetzt wird (diese Variable sowie $LOGNAMEwird normalerweise von der Shell oder dem System auf Ihren Benutzernamen gesetzt).

Wenn Sie den vom Skript gelesenen Nachnamen verwenden möchten, ändern Sie die Zeile

echo "Thank you" $TITTLE $SURNAME          

hinein

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

Dies würde das Ergebnis echoin eine Datei umleiten, deren Name sich aus dem vom Benutzer eingegebenen Nachnamen ergibt, wobei .txtam Ende des Dateinamens hinzugefügt wird (dies ist natürlich optional). Beachten Sie, dass nicht geprüft wird, ob dadurch eine vorhandene Datei überschrieben wird.

Um diese auch auf dem Terminal auszugeben, duplizieren Sie die Daten mit tee:

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

Um alle drei Datenbits in die Datei auszugeben, verwenden Sie beispielsweise

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

Durch die Gruppierung einer Reihe von Befehlen in geschweiften Klammern können Sie die gesamte Ausgabe der Gruppe in einer einzigen Umleitung umleiten.

Sehen "Warum ist printf besser als echo?", warum ich beim Drucken variabler Zeichenfolgen printfeher anstelle von verwende .echo

verwandte Informationen