Anda di halaman 1dari 20

GESTIN DE PERMISOS, USUARIOS Y GRUPOS EN LINUX:

PROGRAMACIN EN SHELL
SUMARIO

-Como ejecutar un script


-Variables y parmetros
-Sentencias de entrada y salida
-Estructuras de control de flujo
-Funciones
OBJETIVO

- Implementar script como construccin de facilidades


para la gestin de UNIX/LINUX
PROGRAMACIN EN SHELL
Shell
es el interprete de comandos del sistema. Es una interfaz de texto de altas
prestaciones, que sirve fundamentalmente para tres cosas: administrar el sistema
operativo, lanzar aplicaciones (e interactuar con ellas) y como entorno de
programacin.
Los programas de Shell no necesitan compilarse. La Shell los interpreta linea a linea.
Se les suele conocer como Shells Scripts y pueden ser desde sencillas ordenes hasta
complejas series de instrucciones para el arranque del propio sistema operativo.

Porqu la programacin en el shell?


El shell sigue siendo una herramienta muy eficiente. El shell no es slo una coleccin
de comandos sino un lenguaje de programacin.: El shell es muy til para tareas de
administracin, puedes comprender rpidamente si tus ideas funcionan, lo que lo
hace muy til tanto para crear un prototipo como para crear pequeas utilidades que
realicen tareas relativamente simples, donde la eficiencia importa menos que la
facilidad de configuracin, mantenimiento y portabilidad.
PROGRAMACIN EN SHELL
Para escribir un script, necesitamos:

1. Escribir los comandos del shell en un archivo de texto.


2. Hacer el archivo ejecutable (chmod +x archivo).
3. Escribir el nombre del archivo en la lnea de comandos.

Cabe hacer algunas observaciones, si queremos utilizar otro tipo de shell para que
interprete los comandos, debemos colocar como primera lnea en el archivo de texto
el nombre del shell; por ejemplo si nuestros comandos sern interpretados por el
shell ksh, entonces colocamos como primera lnea: #!/bin/ksh

Cmo se crea un script

Vamos a crear un fichero al que llamaremos script.sh. Para ello, abrimos nano, gedit o
cualquier otro editor de texto y escribimos:

#!/bin/sh
echo Este es mi primer script en bash!
PROGRAMACIN EN SHELL
Podemos ejecutarlo haciendo una llamada al shell y pasando como
parmetro el nombre del script:
$ sh script.sh

Tambin podemos hacerlo ejecutable dndole permisos de ejecucin:


$ chmod +x script.sh

Una vez aadido el permiso de ejecucin, ya podemos ejecutarlo directamente:


$ ./script.sh

Si observamos el cdigo fuente de nuestro pequeo script, veremos que consta de dos
lneas:
- En la primera se indica el shell que se va a usar como intrprete para este
script: #!/bin/sh. Esta siempre debe ser la primera lnea de un shell script.

- La segunda lnea contiene el comando echo, que muestra un mensaje por


pantalla.
PROGRAMACIN EN SHELL
Variables de entorno
Normalmente los programas utilizan variables para poder llevar a cabo
determinadas acciones.
Una variable es un contenedor. Consta de un identificador que la distingue de otra (su
nombre) y de un contenido. La relacin entre variable y contenido es de equivalencia.
Por lo general las variables en shell no tienen tipos asociados y se definen de la
siguiente forma:
identificador = contenido
Ejemplos:

# i vale 1
i=1
# I vale echo
I=echo
# msg vale Hola mundo!
msg="Hola mundo!"
PROGRAMACIN EN SHELL
Para acceder al contenido de una variable empleamos $ delante
de su identificador:
$identificador
Ejemplos:
$ i=1 ; echo $i
$ msg="Mola mundo!" ; echo $msg
$ fu=echo; $fu goo!

ALGUNAS VARIABLES ESPECIALES DEL SHELL


$# Nmero de parmetros que han pasado a la shell.
$* Un argumento que contiene todos los parmetros que se han pasado ($1,
$2...) menos el $0.
$? Nmero donde se almacena el cdigo de error del ltimo comando que se ha
ejecutado.
$$ Nmero de proceso actual (PID)
$! ltimo nmero de proceso ejecutado.
PROGRAMACIN EN SHELL
Ejemplo: el archivo se llama ej_shift2.sh
#!/bin/bash
echo El nombre del programa es $0
echo El nmero total de parmetros es $#
echo Todos los parmetros recibidos son $*
echo El primer parmetro recibido es $1
echo El segundo parmetro recibido es $2
echo El tercer parmetro recibido es $3
echo El cuarto parmetro recibido es $4
Ejecutamos el script:
$./ej_shift2.sh uno dos tres cuatro
PROGRAMACIN EN SHELL
La salida de los programas
Cuando se ejecuta un programa, un comando UNIX es un programa,
podemos, a parte de redirigir su entrada y su salida, recoger el resultado de su
ejecucin y su salida.
El resultado es un valor numrico, por lo general cero si todo ha ido bien, y distinto de
cero si ha habido alguna clase de error.
- Para obtener el resultado de la ejecucin del ltimo comando, utilizamos $?

Ejemplo:
mkdir /home/alumnos/$idalumno > /dev/null ; echo $?

if [ $?=0 ]; then
echo "El directorio $idalumno se ha creado sin problemas"
fi
PROGRAMACIN EN SHELL
Control de flujo
Esto refiere al cauce o flujo normal de los programas. No siempre hay un
solo camino a seguir y estas proposiciones permiten que el programa realice distintas
tareas, segn las condiciones de las variables a interpretar.

"if"
El"if" es un proposicin de control que verifica si es verdadera o falsa una condicin.
Sintaxis:
if [ comando-condicin ]; then
Comandos si la condicin es verdadera
else
Comandos si la condicin es falsa
fi
PROGRAMACIN EN SHELL
Comparaciones de cadenas alfanumricas
Operador Verdad (TRUE) si:
cadena1 = cadena2 cadena1 es igual a cadena2
cadena1 != cadena2 cadena1 no es igual a cadena2
cadena1 < cadena2 cadena1 es menor que cadena2
cadena1 > cadena 2 cadena1 es mayor que cadena 2
-n cadena1 cadena1 no es igual al valor nulo (longitud mayorque 0)
-z cadena1 cadena1 tiene un valor nulo (longitud 0)

Comparacin de valores numricos


Operador Verdad (TRUE) si:
x -lt y x menor que y
x -le y x menor o igual que y
x -eq y x igual que y
x -ge y x mayor o igual que y
x -gt y x mayor que y
x -ne y x no igual que y
PROGRAMACIN EN SHELL
Ejemplo:

read numero
# comparamos cadenas de texto, as que usamos comillas
if [ $numero -eq 5 ]; then
echo Acert tu nmero. Es el 5.
fi
Sentencia case
Se utiliza cuando el valor de una variable ha de ser contrastado con varios valores. Su
sintaxis es la siguiente:
case variable in
patron1) comando1
comando2;;
patron2) comando3
comando4;;
....
....
esac
PROGRAMACIN EN SHELL

Ejemplo:
!/bin/bash
echo "[1] Listar archivos"
echo "[2] Ver directorio de trabajo"
echo "[3] Crear directorio
read -p "Ingrese una opcin: " OPCION
case $OPCION in
1) ls;;
2) pwd;;
3) read -p "Ingrese nombre del directorio a crear: " DIRECTORIO
mkdir $DIRECTORIO;;
*) echo "Opcin ingresada no valida, intentelo de nuevo"
exit 1;;
esac
PROGRAMACIN EN SHELL
Bucles
El shell nos aporta mecanismos para realizar tareas repetitivas mediante el empleo de
estructuras que permiten repetir un bloque de comandos.

El bucle for
Esta estructura permite repetir un bloque de comandos asignando valores de una serie a una
variable en cada iteracin.
for VARIABLE in SERIE; do
bloque de comandos
done
Ejemplos:

for i in 1 2 3 4 5; do
echo $i
done
# con cadenas de texto
for palabra in uno dos tres cuatro cinco; do
echo $palabra
done
PROGRAMACIN EN SHELL
El bucle while

Es otra estructura de bucle que permite ejecutar un bloque de comandos mientras se evale
una condicin a cierto:
while CONDICION; do
bloque de comandos
done
Ejemplos:
i=1
while [ $i -le 10 ]; do
echo $i
i=$(($i+1))
done

# leemos de stdin hasta que se introduzca la palabra 'salir'


read linea
while [ $linea != "salir" ]; do
read linea
done
PROGRAMACIN EN SHELL
Funciones
Una funcin o subrutina es una agrupacin de comandos bajo un mismo nombre.
Lo que nos permitir dividir el programa en bloques y programar cada bloque por
separado, o agrupar una serie de comandos que se ejecutan a menudo bajo un mismo nombre.
Veamos cul es la sintaxis de una funcin:
nombre_funcion()
{
comando1
comando2
...
...
}

Exit. Este comando se utiliza en programacin de shell para terminar inmediatamente un script
y volver al shell original.
exit 6 termina el script devolviendo el nmero indicado, lo que puede usarse para determinar
condiciones de error.
exit 0 termina el script devolviendo 0, para indicar la finalizacin exitosa de tareas. Escribir
slo exit tambin devuelve cdigo de error 0.
PROGRAMACIN EN SHELL
Depuracin de shell scripts

El shell tambin tiene un modo de depuracin real. Si hay un error en tu script


scriptconerror.sh entonces puedes depurarlo con:
sh -x scriptconerror.sh
La opcin -x del comando sh lista los comandos y los argumentos que son ejecutados.

El shell tambin tiene un modo para comprobar errores de sintaxis sin ejecutar el programa. Se
usa as:
sh -n tu_script.sh

La opcin -n del comando sh hace que no se ejecute ningn comando, solo chequea la sintaxis.
Si no retorna nada, entonces tu programa no tiene errores de sintaxis.

La opcin -e en modo no interactivo, hace que si un comando falla se termine inmediatamente


el script.

La opcin -v imprime las lneas de entrada segn son ledas.


PROGRAMACIN EN SHELL

Vemos un ejemplo simple:

#!/bin/bash
function funcion1 {
echo "estamos en la 1 y le pasamos el parametro:"$1
}
function funcion2 {
echo "estamos en la 2 y le pasamos el parametro:"$1
}
# ahora a ejecutarlas!
funcion1 hola
funcion2 chau
PROGRAMACIN EN SHELL

PRACTICA:
1. Realizar un script que visualice un men con 4 opciones:
- buscar un archivo
- cambiar permisos a un fichero
- buscar una cadena en un archivo
- salir

2. Ejercicio 2: realizar un script que dado un nmero 'n' muestre los diez primeros
elementos de su tabla de multiplicar, mostrando el resultado en la forma: i x n =
resultado.

3. Utilizar en un script algunas variables y a continuacin llamar a un segundo script


permitiendo que algunas variables sean utilizadas por el segundo