It depends in part on how you count them.
Many games & engines use large shaders, called "ubershaders," that try to cover many different material effects and rendering techniques, with controllable toggles to turn features on and off depending on:
- what's needed for each specific material
- graphics quality/performance settings selected at build time, by the player at runtime, or by the level-of-detail system as the object recedes into the background
- peculiarities of each target platform (eg. adaptations to differences in APIs, or optimizations specific to console hardware)
These then get compiled into individual shader programs (called "variants" or "permutations") for each unique subset of features used somewhere in the game, and each platform-specific variant.
So if we had a material with:
- transparent & opaque versions
- metallic & non-metallic reflection models
- with & without a smoothness/roughness map
- with & without an emissive texture
- with & without parallax occlusion mapping
- with & without a detail map / detail normal
- baked or realtime diffuse lighting
- with and without sampling a realtime reflection probe
- DirectX vs OpenGL platform targets
- high & low-quality presets
- VR/stereoscopy support
Then we've already got over 2000 permutations just from that "one" shader!
This example is a little contrived, but not outside the realm of possibility. This article for example suggests that in Unreal 4, recompiling all shaders means around ~125 base effects multiplied to ~10 000 permutations, and Unity users report seeing ~6000 shader variants compiled under certain VR conditions.
So, as ballparks, "dozens to low hundreds" of root shader types is realistic, which may expand into hundreds or thousands of compiled shader programs in use, depending on the scope of the game and the number of different features/platforms it's trying to support.