There are two ways to do this.
The simplest way is to use gdb's built-in Python scripting capability. For a case like the above, you could write a new convenience function that does what you like. A convenience function is appropriate here because it can be used directly in an expression.
To write a convenience function, look through the docs for gdb.Function
.
Then you would use it like:
set $retval = $_shellcommand("shell command")
If you'd rather not dive into Python, there is still a way; although it is somewhat more painful.
For a simple shell command, the idea would be to write the exit status of the shell command to a gdb script file, which you then source:
(gdb) shell false; echo "set \$retval = $?" > /tmp/q
(gdb) source /tmp/q
(gdb) print $retval
$1 = 1
This gets somewhat hairier if you want more than just the exit status, or if you want to use output from gdb commands in the computation.