2016-07-30 15 views
0

Ich versuche, wenn die Anzahl der Argumente zu überprüfen ist und ob Funktionen, die ich in meinem Skript zuvor wahr sind geschrieben, aber es funktioniert nicht:Bash mehr Bedingungen in if-Anweisung und Funktionen

if [ $# -eq 1 && echo "$1" | lgt && echo "Invalid Length - $1" && echo "$1" | checking_another_function_etc ]; then 
echo "some output" && exit 1 

"Lgt" ist ein Funktionsname.

Ich habe versucht, (([[[zitiert, mehrere if-Anweisungen, aber es hat auch nicht funktioniert. Vielleicht sollte ich die Anzahl der Argumente und Funktionen mit Anführungszeichen trennen, aber ich bin mir nicht sicher, wie zu tun es. ich frage mich, ob es überhaupt möglich ist echo Befehl if Zustand zu übergeben.

Die Sache ist, ich nach der Überprüfung aller Funktionen eine echo Anweisung müssen, aber nach jeder Funktion, die ich seine eigenen echo Aussage benötigen.

Antwort

3

[ ist ein gewöhnlicher Befehl (auch geschrieben test); der [/] kann nicht einfach eine Befehlsliste umgeben. Nur der Ausdruck -eq wird durch [ ausgewertet; die anderen sind separate Befehle, die durch den Shell-Operator && verbunden sind.

if [ $# -eq 1 ] && 
    echo "$1" | lgt && 
    echo "Invalid Length - $1" && 
    echo "$1" | checking_another_function_etc; then 
    echo "some output" && exit 1 
fi 

Eine mögliche Trennung von Befehlen zur Verfügung stellen kann, was Sie erwarten:

if [ $# -ne 1 ]; then 
    echo "Wrong number of arguments" 
    exit 1 
elif ! echo "$1" | lgt; then 
    echo "Invalid length: $1" 
    exit 1 
elif echo "$1" | checking_another_function_etc; then 
    echo "some output" 
    exit 1 
fi 

Es ist selten sinnvoll, einen echo Befehl die LHS des && Betreibers zu machen, weil sein Exit-Status immer 0.

+0

es zeigt jeden Ausgang nach jeder Funktion, aber es zeigt mir immer noch nicht die Ausgabe nach Zustand (nach; dann) – Josh

+1

@Josh Diese Antwort co Richtig übersetzt, was in der Frage in gültigen Shell-Code war. Die Frage liefert jedoch nicht genug Informationen, um zu bestimmen, ob dies das ist, was Sie wollten oder nicht. – John1024

+0

Was ist der Exit-Status (erwartet und tatsächlich) von 'checking_another_function_etc'? – chepner