bash - opciones - Cómo hacer una operación OR lógica en Shell Scripting
menu de opciones en bash (7)
A veces necesitas usar corchetes dobles, de lo contrario obtendrás un error como demasiados argumentos
if [[ $OUTMERGE == *"fatal"* ]] || [[ $OUTMERGE == *"Aborting"* ]]
then
fi
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
Este código funciona para mí:
#!/bin/sh
argc=$#
echo $argc
if [ $argc -eq 0 -o $argc -eq 1 ]; then
echo "foo"
else
echo "bar"
fi
No creo que sh apoye "==". Use "=" para comparar cadenas y -eq para comparar ints.
man test
para más detalles.
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))
...
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}
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