Instantiation Wont Stop

So, I brute forced my way in to getting this script to function. I slightly understand why it works with how I set it up. However, I believe there must be a much better way to do this. The problem appears to be that once the script hits instantiate that it wants to do it before anything else and repeat on it. I made it so it turns the collider off, so it forces it to only shoot twice ( even though this should only be once) instead of infinitely. Any help is much appreciated here.

using UnityEngine;
using System.Collections;

public class Shoot : MonoBehaviour {

public GameObject bullet;

public GameObject turret;

private Vector3 turretLocation;

private Quaternion rotation;

private bool shot = false;

public int waitTime;

IEnumerator Start()
	yield return new WaitForSeconds(waitTime);

IEnumerator OnTriggerEnter(Collider collision){
	if (shot == false){
		yield return new WaitForSeconds(waitTime);
		shot = true;
	if (collision.tag == "player" && shot == true) {
		collider.enabled = false;
		turretLocation = turret.transform.localPosition;
		rotation = new Quaternion(0f,0f,0f,0f);
		Instantiate(bullet, turretLocation, rotation);
		shot = false;
	collider.enabled = true;


@PianoHandsThePerson - OnTriggerEnter() should only be called once at the time the object enters the collider. There is nothing I can see in this code that would cause a repeated Instantiate(). So to start, I recommend doing the Debug.Log() I mentioned above to see if OnTriggerEnter() is being called multiple times. Also in the upper corner of the hierarchy window there is a search field. Type in the name of this script to verify that it is only in the project once. And look at the bullet prefab to make absolutely sure this script is not on the prefab.