Saving a shader might be possible if you can format that data as a fullscreen image (for example a height map for a terrain). Then get the viewport as a texture and save that to a file. I think that could work.
The other option would be to use MeshDataTool, which is not a shader, but you can modify a mesh, move vertices around, change properties like normal or vertex color, etc. This would be in the scripting code (like GDScript), so you should be able to save that to a sort of text file and load it up later.