593 Stimmen

Wie führt man eine logische ODER-Verknüpfung für einen Ganzzahlvergleich in Shell-Skripten durch?

Ich versuche, eine einfache Bedingungsprüfung durchzuführen, aber es scheint nicht zu funktionieren.

Si $# ist gleich 0 oder größer ist als 1 dann sagen Sie hallo.

Ich habe die folgende Syntax ausprobiert, ohne Erfolg:

if [ "$#" == 0 -o "$#" > 1 ] ; then
 echo "hello"
fi

if [ "$#" == 0 ] || [ "$#" > 1 ] ; then
 echo "hello"
fi

0 Stimmen

Für mich funktionieren beide. Haben Sie eine Shell in der Datei . Linie?

1 Stimmen

@Jason Ich habe die Shebang-Zeile tatsächlich vergessen, aber ich habe es gerade damit getestet und es hat nicht funktioniert.

27 Stimmen

> ist die Umleitung der Ausgabe in sh/bash. Jetzt haben Sie wahrscheinlich eine Datei namens 1 .

1031voto

Coding District Punkte 11801

Das sollte funktionieren:

#!/bin/bash

if [ "$#" -eq 0 ] || [ "$#" -gt 1 ] ; then
    echo "hello"
fi

Ich bin mir nicht sicher, ob dies in anderen Shells anders ist, aber wenn Sie <, > verwenden möchten, müssen Sie sie wie folgt in doppelte Klammern setzen:

if (("$#" > 1))
 ...

58voto

jbremnant Punkte 894

Dieser Code funktioniert bei mir:

#!/bin/sh

argc=$#
echo $argc
if [ $argc -eq 0 -o $argc -eq 1 ]; then
  echo "foo"
else
  echo "bar"
fi

Ich glaube nicht, dass sh "==" unterstützt. Verwenden Sie "=", um Strings zu vergleichen und -eq, um Ints zu vergleichen.

man test

für weitere Einzelheiten.

39voto

luca76 Punkte 796

Wenn Sie den Bash-Exit-Code-Status verwenden $? als Variable zu verwenden, ist es besser, dies zu tun:

if [ $? -eq 4 -o $? -eq 8 ] ; then  
   echo "..."
fi

Denn wenn Sie das tun:

if [ $? -eq 4 ] || [ $? -eq 8 ] ; then  

El linker Teil des OPs ändert die $? Variable, so dass die rechter Teil des OPs hat nicht das Original $? Wert.

31voto

TechNikh Punkte 531

Manchmal müssen Sie doppelte Klammern verwenden, sonst erhalten Sie eine Fehlermeldung wie zu viele Argumente

if [[ $OUTMERGE == *"fatal"* ]] || [[ $OUTMERGE == *"Aborting"* ]]
  then
fi

14voto

Peprah David Punkte 131

Wenn ein Bash-Skript

If [[ $input -gt number  ||  $input  -lt number  ]]
then 
    echo .........
else
    echo .........

fi

exit

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X