A razão pela qual ele falha é que o mysqldump não lê a entrada padrão; table1 e table2 são argumentos (opcionais), mas você os está fornecendo não na linha de comando, mas no stdin.
Se $2
for o nome do arquivo de um arquivo que contenha uma linha com o texto table1 table2
, o seguinte deverá funcionar:
mysqldump -h localhost -uroot --lock-tables=false db 'cat $2' > ~/backup/$name'.sql'
Bash expandirá esta linha de comando para
mysqldump -h localhost -uroot --lock-tables=false db table1 table2 > /home/user/backup/somename.sql
que é o que você deseja executar.
No entanto, como você está usando getopt de qualquer forma, talvez você possa colocar "table1" em $2
e "table2" em $3
e executar apenas
mysqldump -h localhost -uroot --lock-tables=false db $2 $3 > ~/backup/$name'.sql'