Udało mi się wyciąć i wkleić twój kod do pliku i działał poprawnie. Jeśli wykonasz to w ten sposób, powinno działać:
Twój „file.sh”:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
Komenda:
$ ./file.sh arg1 arg2 arg3
Pamiętaj, że plik „file.sh” musi być wykonywalny:
$ chmod +x file.sh
Możesz otrzymać ten błąd b / c tego, jak robisz dane wejściowe (z rurką, marchewką itp.). Możesz również spróbować podzielić warunek na dwie części:
if [ $# -lt 3 ] || [ $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
Lub, ponieważ używasz bash
, możesz użyć wbudowanej składni:
if [[ $# -lt 3 || $# -gt 3 ]]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
I na koniec, możesz oczywiście po prostu sprawdzić, czy podano 3 argumenty (czyste, zachowuje zgodność powłoki POSIX):
if [ $# -ne 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi