Cómo hacer una operación lógica OR en el shell scripting

Estoy tratando de hacer una simple comprobación de la condición, pero parece que no funciona.

Si $# es igual a 0 o es mayor que 1 entonces saluda.

He probado la siguiente sintaxis sin éxito:

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

if [ "$#" == 0 ] || [ "$#" > 1 ] ; then
 echo "hello"
fi
Solución

Esto debería funcionar:

#!/bin/bash

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

No estoy seguro de si esto es diferente en otros shells, pero si desea utilizar , tiene que ponerlos dentro de paréntesis dobles así:

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

Este código me funciona:

#!/bin/sh

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

Creo que sh no soporta "==". Utiliza "=" para comparar cadenas y -eq para comparar ints.

man test

para más detalles.

Comentarios (4)

¿has probado algo como esto?

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