Hi i am working on somoething , i need to create a if statement which will take multiple variables in '&&' and '||' combination . for now i am trying to this this simple task but i am getting errors 'Command not found'. i want to first && two counts than || it with a flag i set in my code. following is the code i am trying
if [[$pcount -eq 0 ] && [$ucount -eq 0]] || [test $flag -eq 1]
then
do my stuff
else
exit 1
fi
thank you in advance.
You can't nest [ ... ]
because [
is a shell command, not a separate syntactic construct. In Bash, you can use the [[ ... ]]
syntactic construct which does support nesting, and in portable sh
you can use the ( ... )
parentheses for precedence:
if ([ $pcount -eq 0 ] && [ $ucount -eq 0 ]) || [ $flag -eq 1 ]
Additional remarks:
[test condition]
doesn't make sense, since the [
operator is already an alias for test
. Write either [ condition ]
or test condition
.
Leave a space before [
and the test, otherwise sh
won't recognize the [
as a command name. [
is a command like any other and is not associated with special parsing rules.
In bash, you can do it like this:
if [[ ( $pcount == 0 && $ucount == 0 ) || ( $flag == 1 ) ]]
then
echo "do stuff"
fi
Alternatively:
if [ "$pcount" -eq 0 -a "$ucount" -eq 0 ] || [ "$flag" -eq 1 ]
then
echo "do stuff"
fi
But, I would recommend the first approach.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With