why does my gun stop shooting

hello everyone i really serious need help.Ok im making this game and i got two gun shooting scripts and when ever i shoot them its shoots out like 6 bullets and then it stops shooting this is a serious problem could someone help me please.

c# scripts:

shoot:
using UnityEngine;
using System.Collections;

public class Shoot : MonoBehaviour {

	public GameObject bullet;
	public GameObject bulletHole;
	public float delayTime = 0.5f;
	
	private float counter = 0;
	
	void FixedUpdate ()	
 	{
		if(Input.GetKeyDown(KeyCode.Mouse0) && counter > delayTime)
		{
			Instantiate(bullet, transform.position, transform.rotation);
			audio.Play();
			counter = 0;
			
			RaycastHit hit;
			Ray ray = new Ray(transform.position, transform.forward);
			if(Physics.Raycast(ray, out hit, 100f))
			{
				Instantiate(bulletHole, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
			}
		}
		counter += Time.deltaTime;
	}
}

bullet move script:

using UnityEngine;
using System.Collections;

public class MoveBullet : MonoBehaviour {

	public float speed = 1f;

	void Start ()	
 	{
		Destroy(gameObject, 5f); //Delete the bullet after 5 seconds
	}
	
	void Update ()	
 	{
		transform.Translate(0, 0, speed);
	}
}

Try this:

public class Shoot : MonoBehaviour {
 
     public GameObject bullet;
     public GameObject bulletHole;
     public float delayTime = 0.5f;
     
     private float counter = 0;
     
     void Update ()    
      {
         //for rapid fire you could use this
         //if( Input.GetKey(KeyCode.Mouse0) && counter > delayTime )

         if(Input.GetKeyDown(KeyCode.Mouse0) && counter > delayTime)
         {
             Instantiate(bullet, transform.position, transform.rotation);
             audio.Play();
             counter = 0;
             
             RaycastHit hit;
             Ray ray = new Ray(transform.position, transform.forward);
             if(Physics.Raycast(ray, out hit, 100f))
             {
                 Instantiate(bulletHole, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
             }
         }
         counter += Time.deltaTime;
     }
 }

just like @Linus mentioned above, you should use Update instead of FixedUpdate. I think FixedUpdate is suppose to be used for physics calculation only.

Change FixedUpdate with Update

Whaen taking user input you need to use Update. As FixedUpdate is not every frame. And will only work if the giving input that exact frame.

Edit:
Did some testing with your script. I still think you should use Update for gathering input. But the problem is that the bullets collide with each other. Well they dont collide but their raycast hits another bullet.

To test, try with a delay time of say 2 seconds. Or shorten the length of this raycast

if (Physics.Raycast(ray, out hit, 100f)

Best solution I think is using a layermask. see Using layer mask in raycast - Unity Answers
c# - Raycast but ignore the collider of the gameobject it's being called from - Stack Overflow

Try this:

public class Shoot : MonoBehaviour {

	public GameObject bullet;
	public GameObject bulletHole;
	public float delayTime = 0.5f;
    private float counter = 0;
     
	void FixedUpdate ()    
	{
		if(Input.GetKeyDown(KeyCode.Mouse0) && Time.time >= counter)
		{
			Instantiate(bullet, transform.position, transform.rotation);
			audio.Play();
			counter = Time.time + delayTime;

			RaycastHit hit;
			Ray ray = new Ray(transform.position, transform.forward);
			if(Physics.Raycast(ray, out hit, 100f))
			{
				Instantiate(bulletHole, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
			}
		}
 	}
}

public class Shoot : MonoBehaviour
{
public GameObject bullet;
public GameObject bulletHole;

        public float delayTime = 0.5f;
        private float counter ;
    
        void Update ()
        {
           if(Input.GetKeyDown(KeyCode.Mouse0) && Time.time > counter )
           {
              Instantiate(bullet, transform.position, transform.rotation);
              audio.Play();
              counter = Time.time + delayTime;

              RaycastHit hit;
              Ray ray = new Ray(transform.position, transform.forward);

              if(Physics.Raycast(ray, out hit, 100f))
              {
                 Instantiate(bulletHole, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal));
              }
           }
        
        }
     }