GUI Button shooting Problem!!! Please help!

I do want the bullet to be fired only once when I press the GUI button, wait for few seconds then when the player press or touch the GUI button it will shoot the next one.

In my case, it is been shooting after I finished pressing the GUI button. Please help to fix it. Thanks. Much appreciated.

{
	public Transform muzzle;
	public GameObject playerBullet;	
	public float bulletSpeed = 1000f;
	public float timeBetweenShots = 5.0f;
	
	public Texture2D texture = null;	
	
	public AudioClip LaserShoot;
	
	private bool shoot = true;
	private bool canShoot = true;
	
	private Transform myTransform;
	
	     
	void Start()
	 {		
		myTransform = transform;
     }
	
		// Touch this Button to shoot!
	    void OnGUI()	  
	    {		
		//if(GUI.Button(new Rect(Screen.width / 2 -63, Screen.height / 2 -63, texture.width,texture.height,texture)) Add Own Texture		
			
		 if(GUI.Button(new Rect(1000, Screen.height - 80,120,30),"Fire"))			
		 { 	
		 	Shooting();			
		 }
		
	  }
		
     void Shooting()
	{		
	 shoot = true; 
	 if(canShoot == true)	
	{	
	 canShoot = false;		
	 StartCoroutine("TimerShoot");	 	
	}		
	}			
	
		 
	 IEnumerator TimerShoot()
	 {
	 while(shoot)
	 {	
	 if(playerBullet)	
	 {	
	 GameObject newplayerBullet;	 
	 newplayerBullet = Instantiate(playerBullet,muzzle.position,muzzle.rotation) as GameObject; // casting and Instantiating bullet.
				
	 AudioSource.PlayClipAtPoint(LaserShoot,myTransform.position);			
				
	 yield return new WaitForSeconds(timeBetweenShots);				
				
	 //Physics.IgnoreCollision(collider, newEnemyBullet.collider);
     canShoot = true;
				
	}
	}
	}	
	 
		
		
		
		
		
		
		
    	
		
	 		
}

while(shoot)

You need to set shoot to false inside the while loop. Avoid while loops if you can. They can be infinite.