Wie man eine logische ODER-Verknüpfung in Shell-Skripten durchführt

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

Wenn "$#" gleich "0" oder größer als "1" ist, dann sag "Hallo".

Ich habe die folgende Syntax ausprobiert, ohne Erfolg:

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

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

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 in doppelte Klammern setzen, wie hier:

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

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, sh unterstützt "==" nicht. Verwenden Sie "=", um Strings zu vergleichen und -eq, um Ints zu vergleichen.

man test

für weitere Details.

Kommentare (4)

haben Sie so etwas schon einmal ausprobiert:

if [ $# -eq 0 ] || [ $# -gt 1 ] 
then
 echo "$#"
fi
Kommentare (2)