scripts script resueltos programas pasar parametros manejo español ejercicios ejemplos cadenas linux bash shell sh

resueltos - shell script linux



¿Qué nos da “$” exactamente en un script de shell? (5)

Es el código de retorno del comando ejecutado más recientemente.

Por convención, 0 es una salida exitosa y no cero indica algún tipo de error.

Esta pregunta ya tiene una respuesta aquí:

Vi el código escrito en algún lugar en línea, y quería saber qué hace exactamente "$? hacer / darnos Googlear no ayudó.

Aquí está el código que lo vi en:

#!/bin/sh ping -c 2 localhost if [ $? != 0 ] ; then echo "Couldn''t ping localhost, weird" fi ping -c 2 veryweirdhostname.noend if [ $? != 0 ] ; then echo "Surprise, Couldn''t ping a very weird hostname.." fi echo "The pid of this process is $$"

Tomado de: http://efod.se/writings/linuxbook/html/shell-scripts.html


Esta variable especial muestra el estado de salida del último comando que se ejecutó en un script o línea de comandos. Por ejemplo, en una línea de comandos, el usuario podría escribir

who; echo $?

La salida sería entonces

user tty7 2014-07-13 19:47 0

Esto muestra la salida de who y el estado de salida del comando. Un guión sería el mismo.

#!/bin/bash who echo $?

Salida: 0


La mayoría de las respuestas faltan un poco de detalle. Una respuesta definitiva se encuentra en el estándar POSIX para el shell, en la sección sobre parámetros especiales :

PS Se expande al estado de salida decimal de la tubería más reciente (consulte la sección Tuberías).

No se sorprenda con la palabra canalización , porque incluso un comando simple como ls es gramaticalmente una tubería que consiste en un solo comando. Pero entonces, ¿qué es $? para una tubería multi-comando? Es el estado de salida del último comando en la tubería.

¿Y qué pasa con las tuberías ejecutadas en segundo plano, como grep foo bigfile|head -n 10 > result & ?

Su estado de salida se puede recuperar a través de la wait una vez que el último comando de la tubería haya finalizado. El proceso de fondo pid está disponible como $! y $? solo informa si el comando de fondo se inició correctamente.

Otro detalle que vale la pena mencionar es que el estado de salida generalmente está en el rango de 0 a 255, con 128 a 255 que indican que el proceso salió debido a una señal. Es probable que la devolución de otros valores de un programa C no se refleje con precisión en $? .


las otras respuestas cubren a bash bastante bien, pero no especifica un shell en su pregunta. En csh (y tcsh) $? se puede utilizar para consultar la existencia de variables , por ejemplo,

if $?my_var then echo my_var exists endif


$? es una variable que contiene el valor de retorno del último comando que ejecutó.

Ejemplo de programa C ( example.c ):

int main() { return 1; }

Ejemplo Bash:

gcc -o example example.c ./example echo $? # prints 1