Cuando una orden termina le devuelve al sistema un código de finalización, un valor cero en caso de terminar correctamente o un valor uno si se ha producido un error. Este valor se almacena en la variable $?.
Por ejemplo
[pfabrega@port /home]$ ls -la /home
total 32
drwxr-xr-x 5 root root 4096 sep 20 14:16 .
drwxr-xr-x 18 root root 4096 sep 20 03:23 ..
drwxr-xr-x 4 root root 4096 sep 28 21:16 httpd
drwxr-xr-x 2 root root 16384 sep 19 18:25 lost+found
drwx--x--x 20 pfabrega pfabrega 4096 nov 24 19:07 pfabrega
[pfabrega@port /home]$ echo $?
0
[pfabrega@port /home]$ ls -la asdfg
ls: asdfg: No existe el fichero o el directorio
[pfabrega@port /home]$ echo $?
1
[pfabrega@port /home]$
Podemos observar como en la primera ejecución ls -la devuelve un valor 0 de terminación correcta y en la segunda devuelve un error y n código 1.