Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web

escudo.jpg (17355 bytes)

MUSICA MIENTRAS NAVEGAS CON REAL AUDIO

sacanimado.GIF (139839 bytes)

168 PERSONAS QUE NOS VISITAN

iconobusca.gif (415 bytes)

TUTORIAL DE UNIX

CONCLUSION

Introducción a los scripts de shell

Un script para el intérprete de comandos o shell es un fichero de texto que contiene una sucesión de comandos de shell. Dicha serie de comandos puede lanzarse de dos formas esenciales:

Con el comando:

sh <nombre_archivo>

en donde sh es la shell concreta para la que está escrito el script: sh, csh, ksh, tcsh, bash... Directamente, dando permiso de ejecución al script, y colocando como primera línea de dicho script:

#!/bin/sh

en donde, de nuevo, debe indicarse la shell concreta para la que se escribió el script. Tradicionalmente los scripts se escriben para la shell sh. Así, en lo que sigue debe entenderse siempre que se está hablando de cómo programar la sh.

Un script en ejecución es un proceso hijo del proceso de shell que lo lanza. Por ello, hereda su entorno (variables de entorno, directorio de trabajo, ...) y los cambios que en el efectúe no afectan al proceso padre. Por ello, dado el script:

#!/bin/sh

cd ..

Ejecutado desde la línea de comandos, no produce ningún efecto ``visible'':

se crea un proceso cuyo directorio de trabajo es el actual dicho proceso cambia el directorio de trabajo al padre del actual el proceso muere

Pueden introducirse comentarios en un script de shell. Un comentario comienza con un caracter # y se extiende hasta el final de la línea.

l estado devuelto por un proceso

Todo proceso Unix puede terminar su ejecución devolviendo un número entero que se denomina estado de salida.

El estado es un número entero. Por convenio, un estado de 0 indica una ejecución con éxito del proceso, y un estado distinto de 0 indica que se produjo algún error.

Un script de shell puede devolver un estado de salida con exit. Con exit 3 se devuelve un estado de salida 3, y con exit sin argumento se devuelve el estado de salida del último comando ejecutado por el script.

Encadenamiento de comandos de shell

Puede realizarse con:

Convierte la salida estándar de un comando en la entrada estándar del siguiente:

who | grep pepe

Ejecuta el comando de la izquierda, y si falla (termina con un estado distinto de 0), ejecuta también el de la derecha:

cat pepe || echo Te equivocas de nombre de fichero, amigo

&&

Ejecuta el comando de la izquierda, y si tiene éxito (termina con un estado de 0), ejecuta también el de la derecha:

cat pepe && echo Bueno, sab'ias el nombre del fichero

Variables en los scripts de shell

En los scripts de shell se manejan:

Variables de entorno, como PATH, TERM, ...

Variables predefinidas, como $1, $2, ... (ver aptdo. 6)

Variables que se definen dentro del propio script.

Para definir y/o modificar el valor de una variable se utiliza:

<variable = valor>

por ejemplo: var1=5.

Para que los procesos hijos del script ``hereden'' variables creadas en éste, se utiliza:

export <variable>

por ejemplo: export var1.

Para utilizar el valor almacenado en una variable se utiliza:

$ <variable>

o bien:

${<variable>}

por ejemplo: echo $var1, o bien eco ${var1}. La fórmula ${var} se utiliza cuando se desea separar el nombre de la variable de los caracteres que vengan a continuación

Paso de parámetros a un script de shell

Dentro de un script de shell, con $1 se hace referencia al primer argumento que se le pasa en la línea de comando, con $2 al segundo, y así hasta $9. $0 hace referencia al nombre del fichero que contiene el propio script.

$# hace referencia al número de parámetros que se especificaron en la línea de comandos (sin contar el nombre del programa).

$@ hace referencia a todos los parámetros de la línea de comandos, entrecomillados y separados por espacios.

Estructuras de control en los scripts de shell

En los scripts, además de colocar sucesiones de comandos, podemos utilizar estructuras de control al estilo de los lenguajes de programación. Aquí se presentan las dos principales. Ejecutar man sh para ver otras.

if--then--else--fi

Permite la ejecución condicional de ciertos comandos, dependiendo del resultado de la ejecución de otros.

if <comando>

then

# ejecutar si comando termina con estado 0 (verdadero)

uno_o_mas_comandos else

# ejecutar si termina con estado NO 0 (falso)

uno_o_mas_comandos

fi

for--do--done

Permite la ejecución de bucles. La variable en la sentencia for va tomando en cada iteración cada uno de los valores de la lista :

for variable [in lista]

do

uno_o_mas_comandos

done

Si se omite la parte [in ], la variable va tomando sucesivamente el valor de cada uno de los parámetros que se pasaron al script en la linea de comandos.

Ejecución de procesos desde la shell

Cuando se introduce un comando en la shell, se crea un proceso hijo para ejecutarlo. Mientras se ejecuta, el ``padre'' (la shell) duerme. Cuando el proceso hijo termina se muere, y el padre continúa su ejecución (se puede introducir otro comando).

La shell también puede lanzar la ejecución de procesos hijos sin quedarse dormida esperando a su finalización. Esto se consigue terminando el comando con &.

Así, el comando xcoral lanza la aplicación XCoral, quedando la shell parada hasta que se cierre dicha aplicación. Sin embargo, el comando xcoral & lanza la aplicación y deja la shell inmediatamente lista para recibir otros comandos.

Unix asigna a cada proceso en ejecución un número de proceso o PID. La variable de shell $$ almacena el PID del proceso en ejecución (para ser utilizada en un script).

El comando ps muestra los procesos del usuario que actualmente ejecuta la máquina.

Sustitución de comandos

Cuando la shell encuentra un comando encerrado entre comillas inversas

(`nombre_comando`) lo ejecuta y lo sustituye en la línea de comandos por la salida estándar de dicho comando.

Así, de hecho date escribe date en la salida estándar, mientras que echo `date` escribe la fecha actual en la salida estándar.

REGRESAR

CONTINUAR