Fabric is a tool for "executing local or remote shell commands."  
Why would you re-implement a remote shell script line by line in a long Fabric script?  
That is, why not just write a brief Fabric script that runs a long remote shell script instead?
It wont be a good idea if I have to run the same script on, lets say, 10 servers. This means I've to not only stick the same long script on 10 servers, but also make sure if I change it on 1 server, the change has to be applied to all servers. I know this can be averted by keeping that script on a shared location, but its much more organized to have the script in the fabfile, which can not only be version controlled but kept uniform across all the roles.
Why re-implement shell commands line by line in a Fabric script?