Un shell es un programa que interpreta las órdenes que le damos al sistema. Este programa lee órdenes de una entrada, las traduce a un formato interno y las ejecuta.
Casi todos los sistemas UNIX / Linx tienen varios shells disponibles siendo uno de los más conocidos el shell bash.
El shell bash lee y ejecuta las órdenes que le damos desde el terminal de cónsola de nuestra distribución Linux favorita. Además, nos permite escribir programas sofisticados que reciben el nombre de scripts. El término bash es un acrónico de Bourne-Again Shell, réplica del shell escrito por Steve Bourne con características de otros como el de Korn o el de C.
Los scripts anteriormente citados son ficheros de texto en los que se introducen órdenes que son interpretadas por el shell y por el sistema. El fichero puede crearse con cualquier editor de texto, y una vez creado podremos ejecutarlo mediante:
bash script [ parámetro … ]
script [ parámetro … ]
dependiendo de si está activo previamente el permiso de ejecución del fichero. Los parámetros que se le pasan se conocen con el nombre de parámetros posicionales, estos son denotados por uno o más dígitos. Cuando llamamos al shell, a un script o a una función tienen asignados unos valores que son los siguientes:
Parámetro 0: es el nombre del shell o del script.
Parámetro 1, 2, …: son los valores de cada uno de los argumentos del shell, del script o de la función.
También, existen los denominados parámetros especiales que son denotados por carácteres que determinan, entre otras cosas, información como el número de argumentos pasados, etc.
Veamos un primer ejemplo de script:
#!/bin/bash
function fun1(){
echo “En la función: $1 $2”
var1 = “dentro de la función”
}
var1 = “Fuera de la función”
echo “El valor de var1 es: $var1”
echo $0: $1 $2
fun1 hola adios
echo “El valor de var1 es: $var1”
echo $0: $1 $2
Como podemos observar, siempre tendremos que empezar un script para el shell bash con la directiva que identifique que, efectivamente, estamos trabajando con ese shell. También podemos ver cómo se pueden definir funciones en él mismo y cómo el paso de parámetros también se puede llevar a cabo a estas, lo que se nos procesará en pantalla será lo siguiente:
Ejecutamos el script con: Prueba 1 2, devolviendo:
El valor de var1 es: Fuera de la función
Prueba 1 2
En la función: hola adiós
El valor de var1 es: dentro de la función
Prueba hola adios
Como se puede ver, el ámbito de las variables que se pasan como parámetros es global con lo que una modificación dentro de un procedimiento o función de las mismas afecta a la totalidad del ámbito del código del script.
Tenemos multitud de posibilidades dentro del manejo de entrada y salida por ejemplo, con echo mostramos por salida un mensaje, con read leemos cualquier cosa que entre de teclado e incluso con estructuras repetitivas (bucles) y selectivas (condicionales) podremos montar programas complejos que lleven a cabo lecturas de ficheros.
Un ejemplo:
#!/bin/bash
case $# in
0)echo –n “Introduzca el nombre de un fichero”
read FICHERO;;
*) FICHERO = $1;;
esac
declare –i LNUM=1
while read LINEA
do
echo “$LNUM: $LINEA”
$LNUM = $((LNUM +1 ))
done < $FICHERO
En esta ocasión, estamos leyendo de la entrada el nombre de un fichero obligando, además a esto, en el caso de que no se pase como parámetro en la llamada al shell y una vez obtenido mientras podamos leer, línea a línea, el fichero mostraremos esta en pantalla con un número y los dos puntos a su lado.
Este ejemplo es muy útil cuando queremos tener, por ejemplo, en un documento un código fuente con las líneas numeradas para hacer mención a algo en concreto. Otras estructuras que posee el shell son los bucles for, los condicionales típicos if then else y select la cual comprueba que una variable se encuentre dentro de un listado.
Además, posee operadores de comparación y procesado de opciones al shell, típico cuando lanzamos un comando seguido de una opción con el guión, por ejemplo find –name.
Veamos un ejemplo de esto:
#!/bin/bash
while getops xy argumentos
do
case $argumentos in
x) echo “Has introducido la opción –x”;;
y) echo “Has introducido la opción –y”;;
esac
done
Supongamos que llamamos a este bash como: getopts –x –y, el resultado obtenido sería:
Has introducido la opción –x
Has introducido la opción –y
Con esto se ha mostrado al lector brevemente un lenguaje de script muy empleado dentro de las distribuciones Linux para el procesamiento automático de determinadas tareas relativas a compilación de elementos y generación de ficheros. Comienza ya mismo a programar en shell bash y automatiza todas las gestiones de tu distribución Linux favorita.

Otros Reportajes:
Los sabores de Linux: Un recorrido por sus distribuciones »
Los más comentados:
Peligro instantáneo: La mensajería instantánea y sus problemas de seguridad (12)
Phishing: La nueva moda de las estafas por Internet (10)
Contraseñas: ¿Elegimos bien? (10)
AMD vs. Intel: Pequeña historia de los procesadores (10)
Wireless: Cuando no hacen falta cables, se está menos seguro (8)



Estás en:



Está muy bien el tutorial pero sólo una cosa. Pone getops en vez de getopts.
Necesito cear un shell básico que implemente unos tres comandos, alguien me puede dar un metodología o diseño para trabajar esto… la idea es que el grupo debe crear un sistema operativo y cada grupo tiene que crear algo específico, en mi caso tengo asignado la Shell Bash y necesito el código fuente de bash, si alguien lo tiene por favor le pido que me oriente o me lo facilite…..