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
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))
...
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.