shell zusammenstellen von variablen



  • Hallo,

    ich habe ein kleines Problem mit einer Stringvariable.
    Wenn ich die einzelnen Variablen ausgebe funktioniert es

    echo "$mybackupfile"
    /backup/kormend_backup_04.11.2018.tar.gz

    echo "$locationOfScript"
    /home/PLp/strato-cloud/PLp/Fernsteuerung/home/visual/backup/Koermend

    echo "user@myip:myip:mybackupfile"
    user@X.X.X.X:/backup/kormend_backup_04.11.2018.tar.gz

    Wenn ich die Variable aber komplett verkette, wird der erste String-Abschnitt komplett verschluckt

    echo "user@myip:myip:mybackupfile $locationOfScript/"
    /home/PLp/strato-cloud/PLp/Fernsteuerung/home/visual/backup/Koermend/

    Hier liegt mein Problem.

    Gruß



  • Dein gezeigtes beispiel passt überhaupt nicht zu den ausgaben.

    Hier mal mein test mit deinem geposteten Beispiel

    #!/bin/bash
    mybackupfile="/backup/kormend_backup_04.11.2018.tar.gz"
    locationOfScript="/home/PLp/strato-cloud/PLp/Fernsteuerung/home/visual/backup/Koermend"
    myip="X.X.X.X"
    
    
    echo "user@myip:mybackupfile"
    echo "user@myip:mybackupfile $locationOfScript/"
    

    Ausgabe

    user@myip:mybackupfile
    user@myip:mybackupfile /home/PLp/strato-cloud/PLp/Fernsteuerung/home/visual/backup/Koermend/
    

    Ich habe hier die variable myip hinzugefügt damit es zu deinem Beispiel passt ist aber vermutlich nicht relevant, wenn du in deinem eigendlichen script/aufruf die echte ip-addresse angibst.

    Wenn ich die syntaxfehler bezüglich zugriff auf variablen fixe kommt das raus

    #!/bin/bash
    mybackupfile="/backup/kormend_backup_04.11.2018.tar.gz"
    locationOfScript="/home/PLp/strato-cloud/PLp/Fernsteuerung/home/visual/backup/Koermend"
    myip="X.X.X.X"
    
    
    echo "user@$myip:$mybackupfile"
    echo "user@$myip:$mybackupfile $locationOfScript/"
    

    Ausgabe:

    user@X.X.X.X:/backup/kormend_backup_04.11.2018.tar.gz
    user@X.X.X.X:/backup/kormend_backup_04.11.2018.tar.gz /home/PLp/strato-cloud/PLp/Fernsteuerung/home/visual/backup/Koermend/
    

    Da passt alles
    Ergo das was du geschrieben hast zeigt nicht da problem



  • Hallo,

    ich hole mir den Inhalt der Variablen auch aus anderen Funktionen.
    Kann ich irgendwie überprüfen ob "Sonderzeichen" (versteckte Zeichen) in den String enthalten sind bzw.
    gibt es Funktionen um diese herauszufiltern.

    z.B. nur 0-9 a-z A-Z . / zulassen

    Bin für jeden Tip dankbar, ich kann es mir nicht erklären, das die Variablen einzelne richtig angezeigt werden,
    jedoch nicht in Kombination aller Variabeln.

    Gruß

    Nachtrag:
    Ich spiele gerade etwas rum und bin nun auf folgendes gestossen

    mytest="user@$myip:$mybackupfile"
    echo -e "MyTest:$mytest"
    echo -e         
    
    mytest1="$mytest Hans" 
    echo -e "MyTest1:$mytest1"
    

    Ausgabe ist nun

    MyTest:user@X.X.X.X:/backup/kormend_backup_04.11.2018.tar.gz

    Hanst1:user@X.X.X.X:/backup/kormend_backup_04.11.2018.tar.gz

    ???
    Obwohl ich "$mytest Hans" geschrieben habe wird der "Hans" vor der mytest Variable ausgegeben.
    Wie kann das passieren ????



  • irgend etwas an deinem setup ist komisch.
    Bei mir funktioniert es

    test.sh:
    #!/bin/bash
    mybackupfile="/backup/kormend_backup_04.11.2018.tar.gz"
    locationOfScript="/home/PLp/strato-cloud/PLp/Fernsteuerung/home/visual/backup/Koermend"
    myip="X.X.X.X"
    
    mytest="user@$myip:$mybackupfile"
    echo -e "MyTest:$mytest"
    echo -e         
    
    mytest1="$mytest Hans" 
    echo -e "MyTest1:$mytest1"
    

    Ausgabe:

    MyTest:user@X.X.X.X:/backup/kormend_backup_04.11.2018.tar.gz
    
    MyTest1:user@X.X.X.X:/backup/kormend_backup_04.11.2018.tar.gz Hans
    

    Ich verwende bash als shell



  • ich konnte es nachstellen. Der String "mytest1="$mytest Hans"" enthält zwischen $mytest und Hans ein \r (Carriage Return).

    echo -e werted steuerzeichen wie \n oder \r aus. Durch das \r wird nach der ausgabe von $mytest (dem inhalt der variable) zum beginn der Zeile zurückgesprungen und dann Hans ausgegeben, was den Anfang von "MyTest1" überschreibt.

    Zwei fragen:

    1. Wiso verwendest du "echo -e"? Ist das jetzt nur für die Beispiele oder wird das auch im eigendlichen script verwendet?
    2. Ist der eigendliche Code bestandteil eines script files? Und wurde dieses eventuell initial unter windows erstellt?
      Wenn es unter Windows erstellt wurde dann enthält das File \r\n als Kennung für eine neue Zeile. Unter Linux wird aber nur \n als neue Zeile Kennung verwendet.

    Mit welchen editor bearbeitest du das script file (falls es eins gib)?



  • Hallo firefly,

    1. OS = Linux
    2. Shell = #!/bin/sh (hat keinen bestimmten Grund, ich könnte aber bash auch benutzen)
    3. Editor= kate
    4. echo -e = eigentlich nur zum testen, eventuell bleiben aber teilweise infoausgaben über echo -e

    Wie kann ich die Steuerzeichen herausfiltern ?

    vielen Dank für dein Bemühen


  • Global Moderator |  Mod

    @worst_case sagte in shell zusammenstellen von variablen:

    Wie kann ich die Steuerzeichen herausfiltern ?

    Das ist die falsche Frage. Die richtige Frage ist, wieso das überhaupt da drin ist. Dann die Ursache abstellen. Dafür ist besonders die zweite Frage von @firefly interessant.