Tengo una función bash shell que toma un argumento y realiza algo si es necesario.
do_somthing() {
if [need to do something on $1]
then
do it
return 0
else
return 1
fi
}
Quiero llamar a este método con varios argumentos y verificar si al menos uno de ellos tuvo éxito.
Intenté algo como:
if [ do_something "arg1" ||
do_something "arg2" ||
do_something "arg3" ]
then
echo "OK"
else
echo "NOT OK"
fi
¿Cuál será la sintaxis correcta para eso?
EDITAR
también: quiero asegurarme de que, incluso si la primera condición es verdadera, todas las demás condiciones se evaluarán.
Gracias,
Respuestas:
Primero ejecute los comandos, luego verifique si al menos uno de ellos tuvo éxito.
fuente
if ((success))
evalúa algo diferente aif success
. Estoy confundido :)((...))
es un comando aritmético. Si el resultado dentro no es cero, devuelve verdadero (0). Si el resultado dentro es 0, devuelve falso (1). "éxito" se trata como una variable que espera contener un número. Ver mywiki.wooledge.org/ArithmeticExpressionUsa barras invertidas.
EDITAR
Además, quiero asegurarme de que, incluso si la primera condición es verdadera, todas las demás condiciones serán evaluadas.
Eso no es posible en una sola declaración if. En su lugar, puede usar un bucle for que itera sobre los argumentos y los evalúa por separado. Algo como:
fuente
[: do_something: unary operator expected
[ expr1 ] || [ expr2 ]
lugar de[ expr1 || expr2 ]
.do_something "arg1"
se interpreta como dos argumentos, mientras que la expresión debería ser unaria. ¿Alguna forma de hacer quedo_something "arg1"
se evalúe como un argumento?if [ $(do_something "arg1") ]
.La sintaxis correcta es:
\
se usa para indicarle al shell que un comando continúa en la siguiente línea.EDITAR : Creo que esto debería hacer lo que quieres:
fuente
[: too many arguments
Yo prefiero:
fuente
\n
carácter, por lo que suif
declaración generaría algunos errores ydo_something
no son nombres de comandos, por lo quedo_something
es una función, por supuesto.do_something
debe ser función o comando, ¿qué más debería ser? Además, no veo dónde generaría un\n
personaje, excepto después de hacer eco del resultado y esto se espera ...