script opciones example bash unix if-statement sh

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