There are many shortcuts to choose to switch between keyboard layouts, but none fits with what you want.
Anyway, it can be done using some tricks.
a) Switch directly between English (English US, English UK) and German
First, create the script, let's call it change_layouts
:
#!/bin/bash
en_layouts="['us', 'gb']"
de_layouts="['de']"
current_layouts=$(gsettings get org.gnome.libgnomekbd.keyboard layouts)
if [ "$current_layouts" = "$en_layouts" ]; then
gsettings set org.gnome.libgnomekbd.keyboard layouts "$de_layouts"
else
gsettings set org.gnome.libgnomekbd.keyboard layouts "$en_layouts"
fi
Save the script in your ~/bin
directory and don't forget to make it executable:
chmod +x ~/bin/change_layouts
Now you can test the script in terminal. Run it more times to see how it works.
Second, add a custom shortcut for this script. Go to System Setting → Keyboard → Shortcuts → Custom Shortcuts and follow the instructions from the below image:

For some reasons, at least in my case, if I set the Alt+Shift shortcut, this will not run the script. Maybe this is a bug. But there are many other choices, like Alt+Shift+1.
b) Switch directly between English US and English UK (when English is chosen)
Go to System Setting → Keyboard Layout → Options → Key(s) to change layout and tick Ctrl+Shift:

Related:
There is still one little glitch that I would like to fix. When there is only one layout (in the
de_layouts
), the icon for displaying the current language disappears.I've created a workaround by putting the entry 'de' two times:
– Anton Petrov Oct 09 '13 at 13:15['de', 'de']
but it is a bit of an ugly fix. I would be happier if there is a way for the keyboard layout icon not to disappear when it contains only one layout. And thanks again! :)de_layouts="['de', 'de']"
or maybede_layouts="['de', 'de\tnodeadkeys']"
– Radu Rădeanu Oct 09 '13 at 13:32