Hi,
I trying to test two condition together (AND) under bash but it’s not working…
The goal is ti have True when two variables are either not set or empty (empty string)
I’ve tried
if [[ -n VARIABLE1 && -n VARIABLE2 ]]; then
    echo "OK"
fi
Here I get the “OK” no matter what .
Thanks.
- If you want true for empty strings, you want -z not -n - if [[ -z "VARIABLE1" && -z "VARIABLE2" ]]; then echo "OK" fi- in - [[there is generally no need for quoting, except the right hand side of an- =comparison
 
- To check for an empty string, use - -z.- -nchecks to see if a string is not empty.- in - [[, empty strings are falsy, so this also works:- [[ ! $VARIABLE1 && ! $VARIABLE2 ]] && echo "OK"
 
- [ condition1 ] && [ condition2 ] && echo "Good" || echo "Bad"- Explanation - [is an alias for the program- test, so you can call- man testfor more info.
 - &&is bash syntax for conjunction. In A && B, B will only be called if A returned a exit code >0 (error). You can call- man bashfor more info.
 - ||is bash syntax for disjunction. In A || B, B will only be called if A returned exit code =0 (success).- trueand- falseare programs that just return exit codes 0 respectively 1.
- Never use - a && b || c. It is not the same as- if a; then b; else c; fi: when- asucceeds but- bfails, it will run both- band- c.- I would not bother with - [unless you absolutely need compatibility with non-bash shells.
 
- Thank you all for yours input - What finally did work - if [[ -z VARIABLE1 && -z VARIABLE2 ]]; then echo "OK" fi- If only Linux was using Python syntax that would be so much more intuitive… - Linux does use Python syntax… in Python. - In Bash though, it uses Bash syntax. 
- The variables need a dollar sign: - $VARIABLE1- help testshows what- -nand- -zdo.
 
- You’re probably wanting - [ -z "${VAR1}" -a -z "${VAR2}" ]. Note in bash that there are minor differences in how- [ ]and- [[ ]]tests are handled. You can pull up a handy cheat sheet of the operands on most distros by running- man test, though you’ll need to read through the CONDITIONAL EXPRESSIONS section of- man bashif you want to see the minor differences of the single vs double square bracket commands (mostly whether locale applies to string order, as well as whether operands are evaluated in numeric comparisons).
- You need to reference the value of the variable, ie: - if [[ -n "$VARIABLE1" && -n "$VARIABLE2" ]]; then echo "OK" fi- not working, both variables do not exist and the - echo "OK"do not trigger.- Then it is working. That is what that code was checking for. - Specifically, -n checks if the variable exists and also does not have a null value. - If you want to reverse it, ie, check that those conditions are not true, put an exclamation mark in front of the whole thing. 
 
 
- Try this: - #!/usr/bin/env bash a="" if [[ -z "${a}" && -z "${b}" ]]; then echo "OK" else echo "Not OK" fi a="OK" if [[ -n "${a}" && -z "${b}" ]]; then echo "More ${a}" else echo "More Unokay" fi
- Could try: - if [ condition1 ] && [ condition2 ]; then echo "OK" fi




