There, you answered your own question...
It does not work because it never is equal to 20. Well acutually I lie, just it will fire after you kill 2^32 or 4,294,967,296 of that unit type (due to integer variable overflow). The game will however most likly have crashed by then due to underlying platform and engine instabilities so as far as you are concerned it is never.
Basically
map starts
bugs = 20
unit of type bugs dies
bugs = 21
if bugs equals 20 do something but it is not so skip.
unit of type bugs dies
bugs = 22
if bugs equals 20 do something but it is not so skip.
etc...
Try giving it an innitial value of 0. That way it should reach a value of 20 after 20 kills.
In GUI, initial value means the value the variable will be given when the map session initializes. Array size for arrays just means the number of indicies (starting at index 0) are givien the initial value. Both are entirly optional if you are going to store stuff. You may need them for some types of object which GUI lacks constructors for or if you want to make your life easier.
Integers are 32bit numbers signed via two's compliment. This gives them a range between -2^31 and +2^31-1. Arrays are dynamic arrays meaning they allocate extra space as needed giving an effective logical index value range of 0 to 8190 inclusive (apparently array index 8191 has problems so it is short of 2^13 indicies).