Frage

Ich teste mit dem Shell -Skript unten:

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi

Es gibt diesen Fehler in der IF -Bedingung:

: ==: unknown test operator

ist == Wirklich nicht die richtige Syntax? Ich laufe wie unten auf der Befehlszeile

test_lsn_2 INSTANCE=ALL

Könnte jemand bitte eine Lösung vorschlagen. Vielen Dank.

War es hilfreich?

Lösung

Ich sehe, dass Sie KSH verwenden, aber Sie haben Bash als Tag hinzugefügt. Akzeptieren Sie eine Bash-bezogene Antwort? Mit Bash können Sie dies auf diese Weise tun:

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

Sehen hier Für mehr dazu.

Andere Tipps

Um Strings zu vergleichen, benötigen Sie ein einzelnes =, kein Doppel. Und Sie sollten es in doppelte Zitate einfügen, falls die Zeichenfolge leer ist:

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi

Versuchen

if [ "$instance" = "ALL" ]; then

Es gab mehrere Fehler:

  1. Sie benötigen doppelte Zitate um die Variable, um vor dem (unwahrscheinlichen) Fall zu schützen, dass es leer ist. In diesem Fall würde die Hülle sehen if [ = "ALL" ]; then Was ist nicht gültig.

  2. Gleich in der Shell verwendet eine einzelne = (Es gibt keine Möglichkeit, einen Wert in einem zuzuweisen if in der Schale).

totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac

I'va already answered a similar question. Basically the operator you need is = (not ==) and the syntax breaks if your variable is empty (i.e. it becomes if [ = ALL]). Have a look at the other answer for details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top