Eu tenho uma função de shell bash que leva um argumento e executar algo nele, se necessário.
do_somthing() {
if [need to do something on $1]
then
do it
return 0
else
return 1
fi
}
Quero chamar esse método com vários argumentos e verificar se pelo menos um deles foi bem-sucedido.
Eu tentei algo como:
if [ do_something "arg1" ||
do_something "arg2" ||
do_something "arg3" ]
then
echo "OK"
else
echo "NOT OK"
fi
Qual será a sintaxe correta para isso?
EDITAR
Também - Quero garantir que, mesmo que a primeira condição seja verdadeira, todas as outras condições ainda serão avaliadas.
Obrigado,
Respostas:
Execute os comandos primeiro e verifique se pelo menos um deles foi bem-sucedido.
fonte
if ((success))
avalia algo diferente deif success
. Estou confuso :)((...))
é um comando aritmético. Se o resultado interno for diferente de zero, ele retornará verdadeiro (0). Se o resultado interno for 0, ele retornará false (1). "success" é tratado como uma variável que espera conter um número. Veja mywiki.wooledge.org/ArithmeticExpressionUse barras invertidas.
EDITAR
Além disso - quero garantir que, mesmo que a primeira condição seja verdadeira, todas as outras condições ainda serão avaliadas.
Isso não é possível em apenas uma declaração if. Em vez disso, você pode usar um loop for que itera sobre os argumentos e os avalia separadamente. Algo como:
fonte
[: do_something: unary operator expected
[ expr1 ] || [ expr2 ]
invés de[ expr1 || expr2 ]
.do_something "arg1"
é interpretado como dois argumentos, enquanto a expressão deve ser unária. Qualquer maneira de fazer podedo_something "arg1"
ser avaliada como um argumento?if [ $(do_something "arg1") ]
.A sintaxe correta é:
\
é usado para informar ao shell que um comando continua na próxima linha.EDIT : Eu acho que isso deve fazer o que você quer:
fonte
[: too many arguments
Eu prefiro:
fonte
\n
caractere, portanto suaif
instrução geraria alguns erros edo_something
não seriam nomes de comandos, portanto mais errosdo_something
é uma função , é claro.do_something
deve ser função ou comando, o que mais deveria ser? Além disso, não vejo onde ele geraria um\n
personagem, exceto depois de ecoar o resultado e isso é esperado ...