Twilo: Variable im Bash Script prüfen

Hallo,

ich stehe gerade auf'n Schlauch :-\

ich möchte eine Variable in ein Bachscript testen

#!/bin/bash
declare testvariable=tar.gz

if ${testvariable} == "tar.gz"; then
  ...
fi

und andere Varianten geben mir immer folgende Fehlermeldung aus

./Scriptname.sh: line xy: tar.gz: command not found

unter Programmierung der Bourne Again Shell
if ["$1" -eq "" ]
das hatte ich wie folgt abgewandelt
if ["$testvariable" -eq "tar.gz" ]
dann erhalte ich jedoch folgende Fehlermeldung
./Scriptname.sh: line xy: [tar.gz: command not found

mfg
Twilo

  1. Hallo Twilo.

    ich möchte eine Variable in ein Bachscript testen

    #!/bin/bash
    declare testvariable=tar.gz

    if ${testvariable} == "tar.gz"; then
      ...
    fi

    Egal welche Art Operatoren du zum Vergleichen verwendest, die Syntax von „if“ ist festgelegt. Soll heißen: ohne die „[]“ um den Ausdruck wirst du weiterhin Fehlermeldungen bekommen.

    unter Programmierung der Bourne Again Shell
    if ["$1" -eq "" ]

    Da sieht man mal, was ein einfacher Vertipper für fatale Folgen haben kann. Du hast den Fehler des Autors natürlich übernommen. Obigem Ausdruck fehlt das Leerzeichen nach der öffnenden eckigen Klammer.

    das hatte ich wie folgt abgewandelt
    if ["$testvariable" -eq "tar.gz" ]
    dann erhalte ich jedoch folgende Fehlermeldung
    ./Scriptname.sh: line xy: [tar.gz: command not found

    Das hier verwundert dann nicht mehr.

    Einen schönen Sonntag noch.

    Gruß, Mathias

    PS: Ich empfehle dieses Tutorial zum Einstieg.

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
    [HTML Design Constraints: Logical Markup]
    1. Hallo Mathias.

      das hatte ich wie folgt abgewandelt
      if ["$testvariable" -eq "tar.gz" ]
      dann erhalte ich jedoch folgende Fehlermeldung
      ./Scriptname.sh: line xy: [tar.gz: command not found

      Nachtrag: -eq, -ne, -lt, -le, -gt, und -ge sind nur für Integerwerte gedacht.

      Einen schönen Sonntag noch.

      Gruß, Mathias

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
    2. Hallo,

      ich möchte eine Variable in ein Bachscript testen

      #!/bin/bash
      declare testvariable=tar.gz

      if ${testvariable} == "tar.gz"; then
        ...
      fi

      Egal welche Art Operatoren du zum Vergleichen verwendest, die Syntax von „if“ ist festgelegt. Soll heißen: ohne die „[]“ um den Ausdruck wirst du weiterhin Fehlermeldungen bekommen.

      unter Programmierung der Bourne Again Shell
      if ["$1" -eq "" ]

      Da sieht man mal, was ein einfacher Vertipper für fatale Folgen haben kann. Du hast den Fehler des Autors natürlich übernommen. Obigem Ausdruck fehlt das Leerzeichen nach der öffnenden eckigen Klammer.

      danke es funktioniert jetzt :)

      PS: Ich empfehle dieses Tutorial zum Einstieg.

      danke, werd ich mir morgen mal genauer anschauen

      ps. gibt es eine Möglichkeit in einer Datei Text zu ersetzen?
      ich möchte in ein Makefile den Pfad von prefix ändern

      mfg
      Twilo

      1. Hallo Twilo.

        ps. gibt es eine Möglichkeit in einer Datei Text zu ersetzen?

        Es gibt sicher unzählige.

        ich möchte in ein Makefile den Pfad von prefix ändern

        Momentan würde ich dies noch wie folgt machen:

        $ echo 'Foo Bar Baz' > test  
        $ cat test  
        Foo Bar Baz  
        $ sed -e 's/Bar/Qux/g' < test > test2  
        $ mv test2 test  
        $ cat test  
        Foo Qux Baz
        

        Die Könner werden dir gewiss bessere Möglichkeiten zeigen.

        Einen schönen Sonntag noch.

        Gruß, Mathias

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]
    3. Hallo nochmal.

      Du hast den Fehler des Autors natürlich übernommen.

      BTW: Hast du ihn darauf aufmerksam gemacht?

      Einen schönen Sonntag noch.

      Gruß, Mathias

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
      1. Hallo,

        Du hast den Fehler des Autors natürlich übernommen.

        BTW: Hast du ihn darauf aufmerksam gemacht?

        nein noch nicht, war gestern nach den Post gleich ins Bett gegangen, werd ich aber nachher machen

        mfg
        Twilo

      2. echo $begrüßung;

        Du hast den Fehler des Autors natürlich übernommen.

        BTW: Hast du ihn darauf aufmerksam gemacht?

        Schau doch mal genauer hin. Der Fehler ist mit Absicht eingearbeitet, um das Suchen der Ursache zu verdeutlichen.

        echo "$verabschiedung $name";

        1. Hallo dedlfix.

          Du hast den Fehler des Autors natürlich übernommen.

          BTW: Hast du ihn darauf aufmerksam gemacht?

          Schau doch mal genauer hin. Der Fehler ist mit Absicht eingearbeitet, um das Suchen der Ursache zu verdeutlichen.

          Oh, Tatsache. Die allerletzte Zeile im Beispiel hatte ich überlesen.

          Einen schönen Montag noch.

          Gruß, Mathias

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
        2. Hallo,

          Du hast den Fehler des Autors natürlich übernommen.

          BTW: Hast du ihn darauf aufmerksam gemacht?

          Schau doch mal genauer hin. Der Fehler ist mit Absicht eingearbeitet, um das Suchen der Ursache zu verdeutlichen.

          jetzt wo du es sagst, sehe ich das auch :-)

          mfg
          Twilo