Tests booléens Bash

Je suis d'essayer d'exécuter un bloc de code si un indicateur est défini sur true et l'autre est définie sur false. ie

var1=true
var2=false
if [[ $var1 && ! $var2 ]]; then var2="something"; fi

Depuis qui n'évaluent pas de la manière que je l'ai attendu, j'ai écrit plusieurs autres cas de test et je vais avoir du mal à comprendre comment ils sont évalués.

aa=true 
bb=false
cc="python"
if [[ "$aa" ]]; then echo "Test0" ; fi
if [[ "$bb" ]]; then echo "Test0.1" ; fi
if [[ !"$aa" ]]; then echo "Test0.2" ; fi
if [[ ! "$aa" ]]; then echo "Test0.3" ; fi
if [[ "$aa" && ! "$bb" ]]; then echo "Test1" ; fi
if [[ "$aa" && ! "$aa" ]]; then echo "Test2" ; fi
if [[ "$aa" ]] && ! [[ "$bb" ]]; then echo "test3" ; fi
if [[ "$aa" ]] && ! [[ "$cc" ]]; then echo "test4" ; fi
if [[ $aa && ! $bb ]]; then echo "Test5" ; fi
if [[ $aa && ! $aa ]]; then echo "Test6" ; fi
if [[ $aa ]] && ! [[ $bb ]]; then echo "test7" ; fi
if [[ $aa ]] && ! [[ $cc ]]; then echo "test8" ; fi

Quand je lance le précédent codeblock la seule sortie que j'obtiens est

Test0
Test0.1
Test0.2

cependant, mon attente est que je voudrais obtenir

Test0
Test1
Test3
Test5
Test7

J'ai essayé de comprendre la meilleure façon d'exécuter des tests similaires, cependant, la plupart des exemples que j'ai trouvés sont mis en place dans le format de
if [[ "$aa" == true ]];
ce qui n'est pas tout à fait ce que je veux faire. Donc ma question est quel est le meilleur moyen de faire des comparaisons de ce genre, et pourquoi plusieurs des cas de test que je m'attends à passer tout simplement pas?

Merci!

source d'informationauteur JLMarks