Transform an if to a switch for the readability.
Simplify conditions.
Add a method to Argument in order to test if an argument is required.
Check for the required arguments.
Fixes error handling for the shell and unknown commands.
Remove a useless test.