In a game a material does only influence the visual appearance of the object. The visual appearance is effected by shaders. So regarding to terminology is there a difference between materials and shaders? Should you write one shader for one material?
A material is a combination of attributes which describe how a surface of the given material should look like.
Some engines use different shaders for different materials, in which case a material definition could look like this:
Other engines use one shader for all objects (or rather the engines decides what shader to use dependent on the parameters, the capabilities of the GPU and other factors such as distance), in which case a material would look more like this:
A material is what you apply to geometry to give it a colour and pattern. A texture is a component of a material.
A shader is a small program that allows this material to be rendered at runtime. The nice thing about shaders is that you can do everything from simply rendering the material, to adding dynamic effects like specular highlights and reflections all the way up to extremely clever things such as rendering fake holes through walls where a bullet has hit.
so in answer to your question - yes there is a difference, there is a little overlap too - you could either make a red material or write a shader to render things as red, but both of them also allow you to a lot of things you could not with the other.
and no, you don't need one shader per material. although a material requires a shader to be rendered, you could have one for all you materials if you wanted. they do specific things so if you wanted everything to be shiny for example, you could just write one.
A nice example of shaders is in gears of war. there is one set of materials for the scene, but when you press a button to switch to tactical view, the shaders that are rendering these materials change so things look outlined and generally different. The same thing happens in batman: arkham's 'detective mode'.
A material specifies how an object responds to light.
There are a couple of common parameters:
Now say you have a triangle rendered with material
The job of the shader is to use math to take the vertex positions of triangle, the position of the light, the material color values, and figure out what color the triangle should appear. A vertex shader does this "shading computation" once at each vertex and interpolates the color across the triangle.
A common operation in a shader to compute the diffuse response at a vertex is: