2016-07-06 16 views
1

bin Überprüfung Argument Länge bis 5 oder sechs gleich und versuchte, unter wiewarum Oder Zustand nicht funktioniert Unix-Shell scipt

argc=$# 
if [ $argc -ne 5 -o $argc -ne 6 ]; then 
    echo "yes" 
fi 

if [ $# -ne 5 -o $# -ne 6 ]; then 
echo 
fi 

if [ $argc != 5 ] || [ $argc != 6 ]; then 
echo 
fi 

in allen Fällen ist es nicht die Bedingung treffen könnten Sie mir bitte korrigieren, wo falsch mache?

+0

Was ist der Wert von '$ #'? – chepner

+0

gibt die Befehlszeilenargumentlänge zurück. – jcrshankar

Antwort

2

Ihr Zustand zu sagen: wenn argc nicht gleich 5 ist oder wenn argc nicht gleich 6yes Echo ist. Dies wird immer erfüllt sein, so dass yes immer ausgedruckt wird. Sie möchten if [ $argc -ne 5 -a $argc -ne 6 ] oder if [ $# -ne 5 -a $# -ne 6 ], etc.

+0

Was meinst du damit? –

+2

Wenn Ihre positive Bedingung 'x = A || ist x = B' dann ist sein Negativ 'x ∈ A && x ∈ B' –

+0

es überprüft die Länge der Kommazeilenparameter .. die Länge sollte gleich 5 sein oder die Länge sollte gleich 6 sein .. wenn lengh nicht gleich 5 oder ist 6, sagen 4 oder 7 .. es sollte nach innen gehen, wenn Block. – jcrshankar

0

Im Klartext lautet Ihre Bedingung "(Anzahl der Argumente nicht gleich 5) ODER (Anzahl der Argumente nicht gleich 6)". Diese Bedingung ist immer wahr, da Zahlenargumente nicht gleichzeitig 5 und 6 sein können. Vielleicht möchten Sie stattdessen AND verwenden?

if [ $# -ne 5 -a $# -ne 6 ]; then 
    echo "yes" 
fi 
+0

ja, ich stimme zu .. immer noch nicht, warum das -o nicht funktioniert. – jcrshankar

+1

Nun, die '-o'-Bedingung hat tatsächlich funktioniert. Wenn Sie zwei logische Ausdrücke mit dem Operator OR verknüpfen, wird der gesamte Ausdruck als wahr ausgewertet, wenn einer der Ausdrücke wahr ist. Der kombinierte Ausdruck kann nur dann als FALSE ausgewertet werden, wenn beide Ausdrücke (kombiniert durch OR) falsch sind. In diesem speziellen Beispiel haben Sie zwei Ausdrücke OR-ediert, die niemals gleichzeitig falsch sein können. Daher wird Ihre if-Bedingung immer als TRUE ausgewertet. – elem4th