Assign a random material to objects

I have 5 objects in my scene and 5 materials, what I would like is for every time the scene starts, the objects will have a random material based on the 5 materials. I would only like each material to be used once. I have this so far:

    public Material[] randomMaterials;

	public GameObject[] coloredWalls;

    void Start () 
	{ 
		foreach(Material materials in randomMaterials)
		{
            //randomMaterial[materials] = Random.Range (0, 5);
			foreach(GameObject wall in coloredWalls)
			{
				wall.renderer.material = materials;
			}
		}
	}

I have it assigning a material at the moment, but as it iterates through the foreach loop without assigning a random value, all of the objects are always the last material in the array.

I tried giving the material a random value using the Random.Range, but unity doesn’t seem to like that. If anyone could give me a hand I’d appreciate it.

As far as I understood, you apply an random material to each object in case of initialization. The code sample is lower:

 public Material[] randomMaterials;
 public GameObject[] coloredWalls;

 void Start ()  {
  foreach(GameObject wall in coloredWalls) { //see all objects
   //Assign random material to object
   wall.renderer.material = randomMaterials[Random.Range(0, randomMaterials.Length)];
  }
 }

I hope that it will help you.