Jak wykonać logiczną operację OR w skrypcie powłoki

Próbuję wykonać proste sprawdzenie stanu, ale wydaje się, że to nie działa.

Jeśli $# jest równe 0 lub jest większe niż 1 to przywitaj się.

Próbowałem następującej składni bez powodzenia:

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

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

To powinno zadziałać:

#!/bin/bash

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

Nie jestem pewien, czy jest to inne w innych powłokach, ale jeśli chcesz użyć , musisz umieścić je wewnątrz podwójnego nawiasu, jak poniżej:

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

Ten kod działa dla mnie:

#!/bin/sh

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

Nie sądzę, że sh obsługuje "==". Użyj "=" do porównywania łańcuchów i -eq do porównywania ints.

man test

po więcej szczegółów.

Komentarze (4)

Czy próbowałeś czegoś takiego:

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