bash agumente einlesen



  • hallo.

    gibt es in der bash oder in deiner anderen shell die moeglichkeit die argumente nach einem befehl zu bearbeiten.

    z.b. #starte programm.sh 3

    wie lese ich diese zeile ein und speichere programm.sh und 3 in variablen.

    danke
    lg
    michi



  • > cat param.sh
    #!/bin/sh
    echo $*
    echo $0
    echo $1
    echo $2
    echo $3
    echo $@
    > chmod a+x param.sh
    > ./param.sh 1 2 3
    1 2 3
    ./param.sh
    1
    2
    3
    1 2 3
    

    HTH



  • hallo.
    danke fuer die rasche antwort. Das mit der uebergabe funktioniert jetzt schon super!
    ich hab nur noch ein kleines problem.

    ich will dasss der User Parameter eingeben MUSS!

    if ["$1" -ne ""]
    then 
     echo "Argument fehlt! Eingabeformat:Befehl name \"Text\" "
     exit 1
    fi
    

    Okay.
    Wenn der User jetzt nichts eingibt dann kommt die meldung "Argument fehlt .."

    Wenn der Benutzer Parameter eingibt dann schreibt er
    line 12: [name: command not found

    Hat jemand einen Tip fuer mich!
    danke
    lg michi



  • Das Problem ist der Ausdruck "" in deiner if-Anweisung. Die if-Anweisung startet das Programm 'test' mit den Argumenten in den eckigen Klammern. Also bleibt bei dir übrig 'test asdfasdf -ne '.
    Du kannst aber die Anzahl der Argumente mit $# auswerten (also 'if [ $# -eq 0 ]').

    Übrigens: Mit dem Befehl 'shift' kannst du die Parameter um 1 "verschieben":

    $2 -> $1
    $3 -> $2
    usw.

    Das kann sehr nützlich sein, wenn man z. B. beliebig viele Dateinamen als Parameter angeben können soll und diese dann in einer Schleife abgearbeitet werden:

    while [ $# -gt 0 ]
    do
      echo $1
      shift
    done
    

    Martin


Anmelden zum Antworten