If you want to check a component field value, then it will be easier to do this on the CM side, however if the files that you want to move around are in your web layer, then its probably not practical to run the scripts and move them from a CM-based application.
In order to determine where you should extend, its also important to understand a bit more about what should happen if the shell scripts fail. Should the items that were published then not be stored on the FS/DB, or do we simply want to notify the editor that something went wrong?
Storage extensions give you access to the moment an item is stored to FS/DB, so are a good extension point if you want to do stuff on an item by item basis, and have the ability to interrupt the transaction of storing the content. Deployer extensions operate in a pipeline, so are less integrated with the deployment of individual items, and have no control over the transaction of storing the published items (except if you put your extension first in the pipeline, and throw an error; subsequent deployment processes in the pipeline will not be executed).
For the event system you could look at the SaveEventArgs
for PublishTransaction
subject- this gives you access to the moments when the status in the Publish Queue is updated.
It might help if you gave a less abstract summary of your requirements.