Atribuição ( = ) nos scripts bash é também comparar o operador no bash.
Veja este exemplo:
if [ "$a" = "$b" ]
Observeos espaço em branco que enquadra o = . Neste caso, estamos comparando "$a" e "$b" .
if [ "$a"="$b" ] is not equivalent to the above.
Teste com o exemplo:
kasiay@kasiyaPC~:$ a=2
kasiay@kasiyaPC~:$ b=3
Em seguida, executamos if [ "$a" = "$b" ]; then echo "equal"; else echo "not equal"; fi , o resultado é " não igual " e é um resultado verdadeiro.
Mas se esfregamos if [ "$a"="$b" ]; then echo "equal"; else echo "not equal"; fi , o resultado é " igual " e o resultado é errado !!
Por que neste caso estamos errados?
Quando estamos usando if [ "$a"="$b" ] , ele é analisado como if [ A_TOKEN ] , então, neste caso, a condição if sempre retorna um resultado verdadeiro. por exemplo:
if [ "$a"="$b" ]; then echo "TRUE"; fi
#result is TRUE
if [ 2=3 ]; then echo "TRUE"; fi
#result is TRUE
if [ anything ]; then echo "TRUE"; fi
#result is TRUE
Tanto = como == são comparações de strings.
The == comparison operator behaves differently within a
double-brackets
test than within single brackets.
[[ $a == z* ]] # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
[ $a == z* ] # File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
links: Operadores de comparação
Onde você está usando uma declaração errada?
Em if ["$P1"=="$P2"];then , deve ser if [ "$P1" == "$P2" ];then . Espaços em torno de == e também depois e antes de colchetes.