Kommandozeilenparameter einlesen funktioniert nicht

S

Sylexx

Grünschnabel
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
 
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
 
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?
 
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
 

Ähnliche Themen

Returncode ($?) bei find immer "0" ?

Switche abfragen über Script

Verschlüsseltes Backup-Script mit rsync

Shell Skript beschleunigen

HandbrakeCLI Shell Skript

Zurück
Oben