First off all, If you are still logged in via another shell: Do not log out.
(This is why you always test before logging out).
Secondly, can you still log on via another user?
Does that other user have (uid 0), then use that to check if /bin/fish is not only installed, but also present in /etc/shells (a list of allowed shells). If it is not, add it an try again.
If that user is allowed to use su or sudo try something like
if all of that failed then you have to log in some other way. Tim's
init=/bin/sh is the traditional solution for people with physical access to their servers. (An HP ILO or a DRAC from Dell will also serve as replacement for physical access).
From the LILO boot loader it this would be done with
init=/bin/sh and followed by a
mount -o remount,rw / after logging in. (else / would be read only, which would make correcting stuff hard). From grub select the option that lets you edit the kernel parameters. Add either a
1 (for run mode 1, aka single user) or 'single' to the end of the kernel parameters.
If none of these apply you will have to physically remove the disk and attacked it to an OS where you do have full access in order to correct it.