У меня есть функция оболочки bash, которая принимает аргумент и при необходимости выполняет что-то на нем.
do_somthing() {
if [need to do something on $1]
then
do it
return 0
else
return 1
fi
}
Я хочу вызвать этот метод с несколькими аргументами и проверить, выполнено ли хотя бы одно из них.
Я попробовал что-то вроде:
if o_something "arg1" ||
do_something "arg2" ||
do_something "arg3" ]
then
echo "OK"
else
echo "NOT OK"
fi
Какой будет правильный синтаксис для этого? EDIT Также - я хочу убедиться, что даже если первое условие верно, все остальные условия будут по-прежнему оценены.
Спасибо,
Использовать обратную косую черту
if [ $(do_something "arg1") ] || \
[ $(do_something "arg2") ] || \
[ $(do_something "arg3") ]
then
echo "OK"
else
echo "NOT OK"
fi
EDIT
Также - я хочу убедиться, что даже если первое условие истинно, все остальные условия будут по-прежнему оценены. [!d3 ]
Это невозможно только в одном выражении if. Вместо этого вы можете использовать цикл for, который выполняет итерацию по аргументам и оценивает их отдельно. Что-то вроде:
do_something() {
for x in "$@"
do
if [need to do something on $x]
then
do it
else
echo "no action required on $x"
fi
done
}
Правильный синтаксис:
if do_something "arg1" || \
do_something "arg2" || \
do_something "arg3"
then
echo "OK"
else
echo "NOT OK"
fi
\ используется, чтобы сообщить оболочке, что команда продолжается в следующей строке.
EDIT: Я думаю, что это должно делать то, что вы хотите:
#!/bin/bash
do_something() {
if [need to do something on $1]
then
do it
echo "OK"
else
echo "NOT OK"
fi
}
do_something "arg1"
do_something "arg2"
do_something "arg3"