bash menu - Cómo hacer una operación OR lógica en Shell Scripting




de opciones (7)

Estoy tratando de hacer una verificación de condición simple, pero no parece funcionar.

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

He intentado la siguiente sintaxis sin éxito:

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

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

Answers

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 usar <,>, debe ponerlos dentro de doble paréntesis de esta forma:

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

Has intentado algo como ésto:

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

Si está usando el código de salida de bash $? como variable, es mejor hacer esto:

if [ $? -eq 4 -o $? -eq 8 ] ; then  
   echo "..."
fi

Porque si lo haces:

if [ $? -eq 4 ] || [ $? -eq 8 ] ; then  

La parte izquierda del OR altera el $? variable, por lo que la parte derecha del OR no tiene el $ original ? valor.


Si un script de bash

If [[ $input -gt number  ||  $input  -lt number  ]]
then 
    echo .........
else
    echo .........

fi

exit

From Bash Reference Manual → 3.4.2 Parámetros especiales

#
($ #) Se expande al número de parámetros posicionales en decimal.

Por lo tanto, $# siempre será 0 o un entero más grande.

Entonces, si quieres hacer algo cuando $# sea ​​0 o mayor que 1, solo tienes que verificar si $# es o no es 1 :

[ $# -eq 1 ] && echo "1 positional param" || echo "0 or more than 1"

Esto utiliza la sintaxis:

[ condition ] && {things if true} || {things if false}

A veces necesitas usar corchetes dobles, de lo contrario obtendrás un error como demasiados argumentos

if [[ $OUTMERGE == *"fatal"* ]] || [[ $OUTMERGE == *"Aborting"* ]]
  then
fi

La forma más fácil de lograr esto con el menor número de líneas es la siguiente:

read -p "<Your Friendly Message here> : y/n/cancel" CONDITION;

if [ "$CONDITION" == "y" ]; then
   # do something here!
fi

El if es solo un ejemplo: depende de usted cómo manejar esta variable.







bash unix if-statement sh