Klara: Bash Zuweisungen

Hi!

warum erhalte ich bei folgenden Konstrukt in ein Bash Skript ein Fehler?

getVersion(){  
  echo 5  
}  
test(){  
    max=10  
    version=`getVersion`  
    version=$[$version+1];  
    while [ $version -le $max ] ; do  
        echo $version  
        version=$[$version+1];  
    done  
}

% sh ./file.sh test
[: 66: Illegal number: $[5+1]

auf der Konsole, wenn ich es wie folgt mache, erhalte ich kein Fehler#
% max=10; version=5; version=$[$version+1]; while [ $version -le $max ] ; do echo $version; version=$[$version+1]; done;
6
7
8
9
10

über jeden Tipp bin ich dankbar

Klara

  1. Hello,

    warum erhalte ich bei folgenden Konstrukt in ein Bash Skript ein Fehler?

    Ist es denn wirklich ein bash-Script?
    Zeig doch mal bitte die Shebang-Zeile des Scriptes

    getVersion(){

    echo 5
    }
    test(){
        max=10
        version=getVersion
        version=$[$version+1];
        while [ $version -le $max ] ; do
            echo $version
            version=$[$version+1];
        done
    }

      
      
    Denn die nächste Zeile deutet darauf hin, dass Du nicht bash, sondern sh verwendet hast  
      
    
    > % sh ./file.sh test  
    > [: 66: Illegal number: $[5+1]  
    >   
    > auf der Konsole, wenn ich es wie folgt mache, erhalte ich kein Fehler#  
    > % `max=10; version=5; version=$[$version+1]; while [ $version -le $max ] ; do echo $version; version=$[$version+1]; done;`{:.language-sh}  
    > 6  
    > 7  
    > 8  
    > 9  
    > 10  
    >   
    > über jeden Tipp bin ich dankbar  
      
    Schaun wir mal, dann sehn wir schon ;-)  
      
      
      
    Liebe Grüße aus Syburg bei Dortmund  
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
    Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>
    
    1. Hi Tom!

      warum erhalte ich bei folgenden Konstrukt in ein Bash Skript ein Fehler?
      Ist es denn wirklich ein bash-Script?
      Zeig doch mal bitte die Shebang-Zeile des Scriptes

      die Shebang-Zeile lautet
      #!/bin/bash

      getVersion(){

      echo 5
      }
      test(){
          max=10
          version=getVersion
          version=$[$version+1];
          while [ $version -le $max ] ; do
              echo $version
              version=$[$version+1];
          done
      }

      
      >   
      >   
      > Denn die nächste Zeile deutet darauf hin, dass Du nicht bash, sondern sh verwendet hast  
      >   
      > > % sh ./file.sh test  
      > > [: 66: Illegal number: $[5+1]  
        
      wenn ich es wie folgt aufrufe, funktioniert es  
      bash ./file.sh test  
      hm...  
        
      gibt es eine Möglichkeit, dass es auch mit  
      sh ./file.sh  
      ohne Fehler läuft?  
        
        
      Klara
      
      1. Hallo,

        wenn ich es wie folgt aufrufe, funktioniert es
        bash ./file.sh test
        hm...

        gibt es eine Möglichkeit, dass es auch mit
        sh ./file.sh
        ohne Fehler läuft?

        sorge dafür, dass beim Aufruf von sh bash und nicht etwa eine andere Shell aufgerufen wird :-)

        Freundliche Grüße

        Vinzenz

        1. Hi Vinzenz!

          wenn ich es wie folgt aufrufe, funktioniert es
          bash ./file.sh test
          hm...

          gibt es eine Möglichkeit, dass es auch mit
          sh ./file.sh
          ohne Fehler läuft?

          sorge dafür, dass beim Aufruf von sh bash und nicht etwa eine andere Shell aufgerufen wird :-)

          das liegt leider nicht in meiner Macht, der Sysadmin wird das sicherlich nicht umstellen.

          Wie müßte die Berechnung aussehen, damit sie relativ Shellunabhängig ist?

          Klara

          1. Hallo,

            Wie müßte die Berechnung aussehen, damit sie relativ Shellunabhängig ist?

            wenn es shellunabhängig sein soll, dann darfst Du kein Shellskript nehmen :-)
            Warum wird es überhaupt mit sh aufgerufen. Wozu ist denn die Shebang da?

            Freundliche Grüße

            Vinzenz

  2. Hallo Klara,

    kenne mich mit Bash Programmierung nicht so besonders aus, aber:

    test(){
        max=10
        version=getVersion
        version=$[$version+1];
        while [ $version -le $max ] ; do
            echo $version                    <-----|
            version=$[$version+1];                 |
        done                                       |
    }                                              |

    |
    Kann es sein, dass hier ein ; fehlt? -------------|

    Liebe Grüße mbr

    1. Hi mbr,

      kenne mich mit Bash Programmierung nicht so besonders aus, aber:

      test(){
          max=10
          version=getVersion
          version=$[$version+1];
          while [ $version -le $max ] ; do
              echo $version                    <-----|
              version=$[$version+1];                 |
          done                                       |
      }                                              |
                                                        |
      Kann es sein, dass hier ein ; fehlt? -------------|

      ein Semikolon muss man nur setzen, wenn mehrere Befehle in einer Zeile stehen

      Klara