Kommandozeilenparameter einlesen funktioniert nicht

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Sylexx, 17.11.2010.

  1. Sylexx

    Sylexx Grünschnabel

    Dabei seit:
    17.11.2010
    Beiträge:
    6
    Zustimmungen:
    0
    Hallo,

    ich habe da noch so ein Problem mit dem Einlesen der Kommandozeilenparameter meines Scriptes:
    Es müssen mind. 2 Paramter angegeben werden, wenn nach diesen 2 Parameter der Parameter "--filter" folgt, müssen es mind. 4 sein.
    Also: Entweder "./progname PARA1 PARA2" oder "./progname PARA1 PARA2 --filter FILTER"
    Das Problem momentan: ich muss den letzten Fall angeben, sonst sagt mir das Script, das keine Filter angegeben sind. Irgendwie verrenne ich mich da gerade...


    Code:
    	case "$1" in
    	
    		### Hilfeoption ### 
    		--help | -h) 	if [ "$#" = 1 ]
    			        then
    				    printHelp
    				else
    				    echo "Error"
    				fi
    		;;
    		
    		### Default: Einlesen Parameter###
    		*) 		 		
    			for i in "$#"
    			do
    			if (( i >= 2 ))
    			then
    			   word=$1
                               option=$2	
    								
    			        ### Aufruf fehlerhaft ###	
    			        if ((i >= 4 )) && [ "$3" = "--filter" ]
    			        then
                                         ### Verarbeite Filter ###
    			        else
    			           echo "Error"
    			         fi
    			else
    				echo "Error"
    			fi	
    			done ### Ende for-Schleife ###
    		;;
    	esac
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Gast123, 17.11.2010
    Gast123

    Gast123 Guest

    Moin,

    du kannst doch in jedem Fall auf $4 zugreifen.
    Wenn es gleich "" ist, dann kannste ja einen Fehler ausgeben.

    Oder du analysierst die $@ gleich alle in einem Case.
    Dann kannst du das mit if [ "$3" == "--filter" ] && [ $# -ge 4 ] abfangen.

    hth

    LG
    Schard
     
  4. Sylexx

    Sylexx Grünschnabel

    Dabei seit:
    17.11.2010
    Beiträge:
    6
    Zustimmungen:
    0
    Aber auch wenn ich einen Filter angebe, muss ich ja die ersten beiden Parameter erst einmal verarbeiten. Wenn ich keinen Filter angebe, soll er ja nicht auf Filter prüfen.

    Wenn ich alle $@ in einem Case verarbeite, dann würde ich ja den Code für das Einlesen der ersten beiden Parameter doppelt aufführen.

    Oder verstehe ich da gerade was falsch?
     
  5. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Klar geht das in einem case auch elegant. Aber hier mal ganz übersichtlich, als Beispiel und Ansatz für Deine eigenen Verbesserungen und Ideen.
    Bitte kein Aufschrei ... ist nur eine Möglichkeit, wie es gehen könnte. Sicher auch nicht vollkommen.
    Gruss zst

    Code:
    #!/bin/bash                                                                                                                     
    [ $# -eq 0 ] && echo "FEHLER - kein Parameter angegeben" && exit 0
    [ $# -eq 1 ] && [ "$1" == "--help" ] && echo "HILFE-Ausgabe" && exit 0
    [ $# -eq 3 ] && echo "FEHLER - falscher Aufruf" && exit 0
    [ $# -gt 4 ] && echo "FEHLER - falscher Aufruf" && exit 0
    
    if [ $# -eq 2 ]
    then
        echo "PARA pruefen und Script mit 2 PARA starten"
    fi
    
    if [ $# -eq 4 ]
    then
        if [ $3 == "--filter" ]
        then
            echo "PARA fuer filter pruefen und Script mit 4 PARA starten"
        else
            echo "$3 ... PARA 3 ist nicht korrekt."
            exit 0
        fi
    fi
    
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Kommandozeilenparameter einlesen funktioniert nicht

Die Seite wird geladen...

Kommandozeilenparameter einlesen funktioniert nicht - Ähnliche Themen

  1. Kommandozeilenparameter

    Kommandozeilenparameter: Hallo zusammen, ich bin vollkommener Newbie in Sachen C Programmierung und hab folgendes Problem: Irgendiwe funktioniert die die Switch...
  2. Kommandozeilenparameter für YaST

    Kommandozeilenparameter für YaST: Hi, ich hab schon ziemlich viel danach gegoogelt leider nur mit dem Ergebnis das der -i und einiger Sendmail parameter. Mich würde aber...
  3. SED: Zu bearbeitende Dateien aus Textfile einlesen

    SED: Zu bearbeitende Dateien aus Textfile einlesen: Tag zusammen, entweder ich suche nach den falschen Stichworten, oder ich mache was falsch. Mein Problem : Mit dem Befehl grep -Rsl...
  4. Datei einlesen, veränder und ausgeben mit AWK

    Datei einlesen, veränder und ausgeben mit AWK: Hallo, Ich will eine Datei, in der eine Literaturliste steht mit Hilfe von AWK Zeile für Zeile einlesen, dann die Datei so verändern, dass zB....
  5. Schleife zum einlesen vieler Dateien funktioniert nicht

    Schleife zum einlesen vieler Dateien funktioniert nicht: [gelöst] Schleife zum einlesen vieler Dateien funktioniert nicht Hallo Leute, ich habe ein kleines Problem. Mein Script zerlegt eine große...