Shift registers can be used if the motors are only turned on and off. PWM only can be simulated, with the PWM frequency and duty cycle resolution limited by the time for the shift-out of the data.
You may be better off with a multi-channel PWM module, with separately programmable PWM channels. These modules also have more than the 8 bit duty cycle resolution of the Arduino PWM outputs.
You may find that you can leave the CS and EN pins disconnected. That leaves three pins per motor. The INA/INB pins set direction and braking. The PWM inputs control speed.
If you only need CW/CCW/Braking control connect the 20 IN pins to a chain of three 8-bit serial-in/parallel-out shift registers and you're done.
If you need speed control, connect the 10 PWM pins to one of those 12-channel PWM controller chips.
I think pulling EN low (to coast) would be the same as setting PWM to zero so if you use the PWM inputs you don't need the EN pins. You may want to connect the 10 CS pins to a 16-input analog multiplexer or to 10 of the analog inputs of an Arduino Mega. You may want to connect the 10 DIAG pins to a parallel-in/serial-out shift register so you can detect controller faults.
If you use an Arduino Mega you should have enough pins for everything without using shift registers: 16 PWM channels, 16 analog inputs, lots of digital I/O.
I need to control both direction and speed. I just ordered a new arduino mega along with a multi-channel PWM module for the digital pins and leave the analog pins for the shift registers. The rest of the arduino mega pins I'll use them for other devices like sensors..etc