PDF de programación - Tutorial de programación en Shell

Imágen de pdf Tutorial de programación en Shell

Tutorial de programación en Shellgráfica de visualizaciones

Publicado el 6 de Noviembre del 2018
618 visualizaciones desde el 6 de Noviembre del 2018
27,9 KB
14 paginas
Creado hace 24a (21/04/2000)
TUTORIAL DE PROGRAMACI ÓN EN SHELL

Esteban Manchado 'ZoSo'

http://so.dis.ulpgc.es/~a2092/

0 - INTRODUCCI ÓN

Lo primero es lo primero: no soy un experto (ni mucho menos) en la
programación en shell, pero hace relativamente poco me interese por
ella e intenté aprender lo que pude de un libro y unos apuntes. El
libro es "UNIX shell programming", de Stephen G. Kochan y Patrick H. Wood, de
Hayden books UNIX system library (que a su vez pertenece a Prentice-Hall),
ISBN 0-672-48448-X. Es necesario que consigas ese libro (que por otro lado es
absolutamente genial) u otro si realmente necesitas saber programar bien en
shell. Esto más que nada es una introducción a la
programación, para hacer algunos programas sencillos y para hacerte una
idea de cómo es programar en shell.

La programación en shell se basa en el uso de las herramientas del
sistema, y el UNIX es un sistema operativo (UNIX y sus clones) que cuenta
con bastantes herramientas de proceso y filtrado de textos y de control de
procesos, entre otras. Por ello, permite automatizar procesos repetitivos, que
hechos a mano serían engorrosos y lentos.

Para poder utilizar este tutorial hay que tener acceso a un shell compatible
con el sh, como el propio sh, el Korn Shell o el bash de Linux.
También hay que tener una cierta soltura con sistemas UNIX (saber lo
que son los permisos de los ficheros, conocer las órdenes
básicas, etc.), y tener cierta idea de las cosas que ofrece el shell
(sustitución de caracteres especiales por nombres de ficheros,
redirecciones de las entradas y salidas, etc.)

Para poder utilizar los conocimientos que pretende facilitar este tutorial,
hay que conocer el mayor número posible de herramientas del sistema,
como pueden ser el grep, el wc, sort, tr, sed, cut y awk (el awk es casi un
lenguaje de programación aparte, aunque puede servir perfectamente como
complemento para la programación en shell. Hay un tutorial de awk muy
bueno en algún sitio de INet, a donde tengo un link en la página
de UNIX).

Si estás acostumbrado o al menos conoces el MS-DOS, puedes pensar que
la programación en shell es algo parecido a los ficheros BAT del
primero, aunque la diferencia entre ellos es más o menos igual de
grande que la existente entre los sistemas UNIX y el MS-DOS (por versatilidad,
por potencia, por diseño ...).

También sería bastante bueno, en realidad más para
manejar las herramientas del sistema que para la programación en shell

en sí, que tuvieras conocimiento de las expresiones regulares (hay
una pequeña lista en mi página de trucos de UNIX).

Y tú te preguntarás: ¿Por qué programar en shell y
no en un lenguaje de alto nivel? Pues depende de para qué lo utilices.
Lo mejor es saber las dos cosas y aplicarlas cuando sean más
adecuadas. La programación en shell es muy útil y cómoda
para crear programas fácilmente modificables, pequeños, que
resuelvan tareas repetitivas, como por ejemplo comprobar ciertas condiciones
cada cierto tiempo (ejecutándolos en segundo plano, claro), o para
ejecutar órdenes muy largas con frecuencia (para no tener que escribir
una orden larga o varias órdenes seguidas todo el tiempo)...
Además, si el programa no requiere mucha potencia pero si comodidad a
la hora de manejar ristras y procesar y filtrar texto, es mucho más
fácil programar en shell, que, por ejemplo, en C.

1 - ¿QUÉ ES UN SCRIPT?

Un script es un fichero de texto que contiene una serie de instrucciones que
se pueden ejecutar en la línea de comandos, y que se
ejecutarán seguidas. En ese sentido son iguales que los ficheros con
extensión BAT de MS-DOS, aunque, por supuesto, como en los sistemas
UNIX no existe el concepto de extensión, pueden tener cualquier nombre.
El único requisito es que ese fichero de texto tenga permiso de
ejecución para la persona que intenta ejecutarlo.

Esas instrucciones se procesarán por orden, como si alguien las
escribiera en el mismo orden en la línea de comandos (no es
exactamente así, pero casi). Cuando se ejecuta un script de shell, se
intenta ejecutar como un binario normal, pero al darse cuenta el sistema
operativo de que no es un binario válido, pero que es un archivo de
texto, ejecuta un shell hijo y empieza a interpretar el fichero de texto. Si
fuera un archivo con un texto cualquiera, tarde o temprano (probablemente en
la primera línea) habría un error de sintaxis y se
abortaría la ejecución del programa.

Comentarios

Como el resto de los lenguajes de programación (al menos todos los que
he visto yo), hay un carácter o unos caracteres especiales que
denotan comentario. Ese texto es ignorado por el shell al interpretar el
script, y sólo sirven para que una persona, cuando edite el script,
pueda entender cómo funciona. Este carácter especial es la
almohadilla `#', y denota que desde ahí hasta el final de la
línea, el resto de los caracteres son un comentario del programador
(como el `//' de C++).

Redirecciones

Al igual que si fuera un ejecutable cualquiera, un script permite
redireccionamientos de la entrada y de las salidas. No ocurre lo mismo con
los ficheros BAT de MS-DOS, por razones obvias (el MS-DOS está mal
hecho). Las redirecciones de la entrada, salida estándar, errores
estándar, y todas las salidas se realizan con los caracteres <, >, 2> y
&> (depende del shell, así son las del bash), como estoy suponiendo que
ya sabes. Algo que puede que no sepas es que existe un fichero-dispositivo en
UNIX, estándar a todos los clones (en Linux está), que es el

/dev/null. Cualquier cosa que es escriba en ese dispositivo virtual va a parar
a un agujero negro, es decir, se ignora completamente. ¿Y para
qué sirve esto?, puede que te preguntes. Pues si quieres comprobar si
un programa devuelve un error, pero no quieres que la salida estándar
aparezca en pantalla (porque al usuario no le interesa, por ejemplo), entonces
redireccionas la salida total (con &>) a /dev/null.

2 - VARIABLES

Como en los lenguajes de programación corrientes, en la
programación en shell existen las variables, que son nombres
simbólicos para zonas de memoria que almacenan datos que nos
interesan. Pero al contrario que los lenguajes de alto nivel normales, las
variables de los scripts no tienen tipo, o quizás sería
más apropiado decir que tienen un tipo único y permanente: a
todos los efectos se tratan como ristras de caracteres.

Para poder hacer sumas y restas hay una orden especial, la orden expr. Esta
orden tiene que recibir cada número u operando como un
parámetro independiente, así que devolverá un error si
intentas hacer algo como expr 5+7. No vale la pena extenderse aquí,
aunque si quieres más información sobre esta instrucción
o cualquier otra característica de la programación en shell, ya
sabes a donde acudir.

Referenciando variables

Las variables de los scripts no se declaran, y siempre están
inicializadas con una ristra vacía o nula. Nótese que esto no es
lo mismo que contener un espacio. Una ristra vacía o nula es una
ristra que no contiene ningún caracter.

Hay que tener cuidado al asignar valores a las variables, ya que no se debe
dejar ningún espacio entre el signo de asignación (el `=') y la
variable o el valor asignado (algo que, por otra parte, es una muy buena
costumbre cuando da igual).

Para referirse a las variables, hay que utilizar el signo dólar ($)
antes del nombre de ésta, siempre que nos refiramos a ellas para
consultar su valor (si asignamos un valor a la variable, o utilizamos la orden
read, que escribe en ella, NO hay que poner el signo de dólar). Si nos
olvidamos del signo dólar, y hacemos algo parecido a:

y=hola
x=y

Nos encontraremos con la desagradable sorpresa de que el valor de x es el
carácter y, y no los caracteres hola, como quizás
pretendiéramos. Para hacer la asignación correctamente,
tendríamos que haber escrito:

y=hola
x=$y

Como en todas o al menos la mayoría de las cosas en UNIX, los nombres
son case sensitive, es decir, que no es lo mismo y que Y (aviso para los
programadores acostumbrados al MS-DOS!).

Dos órdenes útiles: echo y read

Dos órdenes bastante útiles para probar algunas estupideces con
variables son echo y read. La primera es como su homónimo de MS-DOS
(o mejor dicho: el de MS-DOS es una copia, probablemente peor, de su
homónimo UNIX), para mostrar texto por pantalla, y la segunda, como su
nombre indica, es para leer del teclado y poner el resultado en una o varias
variables. El funcionamiento de read es el siguiente: lee del teclado una
ristra, y va asignando las palabras en orden a cada una de las variables que
se le pasen como parámetros, asignando el resto de la ristra a la
última variable. Es decir, que si se le pasan tres variables como
parámetro, se asigna la primera palabra a la primera variable, la
segunda a la segunda variable, y el resto de la ristra leída a la
tercera variable.

Parámetros

Los parámetros son variables normales, que tienen los nombres $1, $2
... $9. Aunque se pueden dar más de nueve parámetros a un
script de shell, sólo se puede acceder de forma directa a los nueve
primeros. La orden shift permite desplazar los parámetros de sitio, de
tal forma que sean accesibles los que estén más allá del
noveno, con el inconveniente de no poder acceder a los primeros. En realidad,
en el Korn shell (y creo que también en Linux, aunque nunca lo he
probado) se puede acceder al resto de los parámetros directamente con
la construcción ${número}.

Las variables $#, $*, $0 nos permiten saber el número de
parámetros pasados al script, la ristra entera de todos los
parámetros pasados, y el nombre del programa que se ha llamado. Esto
último puede parecer estúpido, pero piensa que en UNIX pueden
hacerse links a ficheros. Si utilizas Linux, cuando llamas al vi en realidad
estás ejecutando el fichero ejecutable vim. Fíjate cuando hagas
un ls -l en tu directorio /usr/bin. Tendrá que salir un fichero
parecido a este:

rwxr-xr-x root root vi->vim

Eso significa que el fichero vi no es un ejecutable, sino un link que apunta
al fichero vim
  • Links de descarga
http://lwp-l.com/pdf14140

Comentarios de: Tutorial de programación en Shell (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad