Programacion Shell
Programacion Shell
Extensin Latacunga
Tema: Programacin Shell en Linux
Introduccin:
Al utilizar software libre como es el caso de Linux, es indispensable conocer las
diferentes herramientas que el sistema operativo provee. Ese es el caso del Shell que es
un intrprete de rdenes, debido a sus grandes utilidades puede ser considerado un
lenguaje de programacin.
De acuerdo a lo que el usuario requiera puede hacer uso del Shell que incluye el sistema
operativo, ste debe ser utilizado para tareas con archivos y tareas repetitivas; mas no
con tareas que requieran gran cantidad de procesos y precisin.
Objetivo:
Estudiar la programacin Shell, su significado y comandos ms importantes.
Desarrollo:
Shell
El shell o intrprete de comandos es una interface con nuestro sistema operativo.
Gracias a l podremos dar las rdenes y mandatos necesarios para que nuestro sistema
informtico realice las tareas que necesitamos. No debemos confundir al intrprete de
comandos con el sistema operativo. Este es solo un programa que har de mediador
entre nosotros y el kernel del sistema. El shell puede ser tanto grfico (Ej. La interfase
X-Window), como de texto (Ej. El bash).
Un intrprete de rdenes, o shell en la terminologa Linux, est construido como un pro
grama normal de usuario. Esto tiene la enorme ventaja de que podemos cambiar de intr
prete de rdenes segn nuestras necesidades o preferencias. Existen diferentes shells: el
Bourne Again Shell (bash), el TC shell (tcsh), y el Z shell. Estos shells no son exclusivo
s de Linux, se distribuyen libremente y pueden compilarse en cualquier sistema UNIX.
Podemos ver los shell de los que dispone nuestro sistema mirando en el archivo /etc/she
lls.
El shell es un programa que bsicamente realiza las siguientes tareas:
for(;;) {
imprime indicador de rdenes;
lee la lnea de ordenes;
analiza la lnea de ordenes (arg0,arg1,...,>,<,|,&,...);
prepara entorno segn lo que aparece en lnea de ordenes;
crea un proceso para ejecutar orden;
if (estamos en el proceso hijo) {
ejecuta la orden dada en arg0;
else /* es el proceso padre */
if (lnea ordenes no aparece el smbolo &)
espera hasta que finalice el hijo;
}
}
Cada shell, adems de ejecutar las rdenes de LINUX, tiene sus propias rdenes y varia
bles, lo que lo convierte en un lenguaje de programacin. La ventaja que presenta frente
a otros lenguajes es su alta productividad, una tarea escrita en el lenguaje del shell suele
tener menos cdigo que si est escrita en un lenguaje como C.
Respecto a cuando utilizar el shell y cuando utilizar otro lenguaje de programacin com
o C, ndicar como recomendacin general que debemos utilizar el shell cuando necesite
mos hacer algo con muchos archivos, o debamos de hacer la misma tarea repetitivament
e. No deberamos usar el shell cuando la tarea sea muy compleja, requiera gran eficienci
a, necesite de un entorno hardware diferente, o requiera diferentes herramientas softwar
e.
Respecto a las rdenes, en el bash (el que nosotros vamos a utilizar en prcticas) podem
os encontrar los siguientes tipos:
1. Alias: son abreviaciones para rdenes existentes que se definen dentro de la me
moria del shell.
2. rdenes empotradas: rutinas implementadas internamente en el Shell.
Cuando el shell est preparado para ejecutar una orden, evala el tipo de orden segn el
orden que aparece en la lista anterior: comprueba si es un alias; si no, si es una orden e
mpotrada; y por ltimo, un programa ejecutable (en este ltimo caso la eficiencia es me
nor pues hay que acceder a disco para localizar el ejecutable de la orden). Por tanto, si te
nemos un alias con el mismo nombre que un programa ejecutable, primero ejecutara el
alias.
Los propios shell se comportan como una orden, es decir se pueden ejecutar.
Utilizando Bash
Script
Bsicamente decimos que es un archivo que contiene cdigo escrito en determinado
lenguaje de programacin que el sistema usa para determinada tarea. No es necesario
que tenga una entrada externa ni interfaz grfica, pero s que provoque una salida de
datos procesados (por ms de que el usuario no los vea).
El lenguaje usado por Bash est definido por su propio intrprete y combina la sintaxis
de otros Shells, como el Korn Shell (ksh) o el C Shell (csh). Muchos de los comandos
que usualmente se usan en la consola tambin pueden usarse en los scripts, salvo
aquellos que pertenecen estrictamente a una distribucin en particular.
Estructura de un Script
Para empezar debemos contar con un editor de texto y ganas de programar. Los
archivos que guardamos con extensin .sh podrn ser ejecutados (o interpretados) por la
consola, siempre y cuando la primera lnea sea la siguiente:
#!/bin/bash
Esto le dice al sistema que deber usar la consola para ejecutar el archivo. Adems, el
carcter # permite escribir comentarios.
Comandos Bsicos:
Alias: permite que una cadena de palabras sea sustituida por una ms corta, permitiendo
la reduccin del cdigo.
break: permite salir inmediatamente de un ciclo for, while, until o select (ms adelante
estudiaremos detalladamente los ciclos)
continue: similar al break, excepto que ignora la actual vuelta de ciclo y pasa a la
siguiente.
declare: declara variables y les asigna valores, al igual que typeset (funcionan de la
misma manera). Podemos combinarla con algunas opciones: -i declara nmeros enteros;
-r para variables de solo lectura, a las cuales no se les podr cambiar el valor; a para
matrices o arrays; -f para funciones; -x para variables que podrn ser exportadas
fuera del ambiente del script propio.
help: muestra la ayuda de un comando concreto.
jobs: muestra los procesos en ejecucin.
let: evala una expresin aritmtica
local: crea variables locales, las cuales deben ser usadas preferentemente en funciones
del propio scripts para evitar errores. Puede usar las mismas funciones del comando
declare.
logout: permite salir del inicio de sesin de un Shell completamente; til para los
casos donde trabajemos con ms de una ventana de Shell, en los cuales el comando
exit solo permitir finalizar una ventana a la vez.
printf: permite imprimir un dato y darle formato. Cuenta con muchas opciones, as
que mencionaremos algunas.
read: lee una lnea de standard input (mdulo usado en la carga de datos por medio del
teclado por ejemplo). Podemos pasar opciones como: -t para dar un tiempo lmite de
lectura; -a para que cada palabra sea asignada a una posicin del array aname; -d para
usar un delimitador que se escribir al final de la lnea; entre otros.
ulimit: limita el acceso y uso de ciertos recursos del sistema a los procesos, ideal para
programas que permiten hacer cambios administrativos o que estn orientados a
distintos tipos de usuarios. Al establecer un lmite escribimos un nmero que representa
los kilobytes del lmite.
wait: espera a que se realice determinado proceso o trabajo para continuar.
Bucles en Bash
Un bucle es un trozo de cdigo que repite la ejecucin de un comando o comandos
mientras la condicin es verdadera. Bash tiene diferentes formas para realizar bucles
(for, while, until).
FOR
Tiene dos formatos, uno tipo lenguaje C y otro totalmente diferente:
for variable in [lista]
do
comando(s)...
done
for ((variable=valor_inicial; a <= limite ; incremento))
do
comando(s)...
done
WHILE
while [ condicion ]
do
comando(s)...
done
UNTIL
until [ condicion ]
do
comando(s)...
done
Los procesos
El hecho que el sistema operativo sea multitarea implica que podemos lanzar
ms de un programa a la vez. Un proceso no es ms que un programa o aplicacin car
gado en memoria y ejecutndose. Aunque nuestro ordenador slo disponga de una CPU
el sistema operativo se encarga de repartir el tiempo de procesamiento de la misma para
que varios procesos puedan ir realizando sus operaciones, dando la sensacin que se est
n ejecutando todos a la vez.
Programacin en Shell Bash
Primer Ejercicio: Ingresar un nombre por teclado y luego imprimirlo.
1. Creo el archivo uno.sh en una carpeta
2. Se abre el gedit y ah es donde se procede a programar.
Codificacin:
Corrida del Programa:
Nota: Es importante darle permisos al archivo *.sh para posteriormente pdelo ejecutar.
Segundo Ejercicio: Generar los n nmeros pares, n ingresado por el usuario
Codificacin:
Corrida del Programa
Conclusiones:
- La programacin Shell tiene diferentes editores con los cuales se puede trabajar.
- El Shell ofrece un lenguaje de programacin interpretado, se pueden escribir,
modicar y vericar programas rpidamente y de forma fcil.
- El Shell puede ser utilizado para diferentes tareas segn lo requiera el usuario.
Bibliografa:
- http://www.uco.es/~in1lurom/materialDocente/apuntesSO.pdf
- http://blog.desdelinux.net/programando-en-bash-parte-1/
- http://www.the-evangelist.info/2009/12/bash-bucles-for-while-until/
- http://www.uco.es/~in1lurom/materialDocente/apuntesSO.pdf