You are on page 1of 25

SHELL SCRIPTING II

Your company information

INTRODUCCION

- Condicionales: If-Then, Case-Esac, For, While


- Operadores
- Funciones
- Ejemplos

IST ABACO

CONDICIONALES: IF - THEN
- Tambien conocido como constructor condicional (if)
- Debemos tener presente que el principal objetivo de un shell es el de
ejecutar rdenes, por tanto, cuando se diseo el constructor if se
plante tomar como expresin lgica la propia ejecucin de un
programa.
- En este caso se considera como cierto el hecho que un programa
termine sin errores y como falso que se produzca algn error en la
ejecucin del mismo.
NOTA: El cdigo de retorno de los procesos es un entero de 8 bits.
Cuando este entero es cero se considera que la ejecucin no ha
encontrado ningn error. El valor de salida de la ltima lnea de rdenes
ejecutada se puede acceder en la variable $?
IST ABACO

SINTAXIS IF-THEN

if orden
then
Ordenes a Ejecutar

else
Ordenes a Ejecutar

fi

IST ABACO

SINTAXIS IF-THEN
Ejemplo 1:

if cp /root/bin/fichero.txt
then

/opt/clase10.txt

echo Copia correcta

else
echo Error en la copia

fi

IST ABACO

SINTAXIS IF-THEN
Ejemplo 2:
passwd=abaco
echo Ingresa la contrasena super-secreta:
read PASSWORD

if [$PASSWORD == $passwd ];
then
echo Tu clave es correcta :)

else
echo INTRUSO, Acceso DENEGADO

fi
IST ABACO

SINTAXIS IF-THEN

Recordar:
- Que el espacio es muy importante en la instruccin if.
- Siempre que uses IF-THEN tendrs que utilizar la sentencia fi
para poner fin a un caso de uso.
- Tambin puede reemplazar el "==" con "! =" Para probar si las
variables no son iguales.
- Hay otras seales que puedes usar en lugar de "==" para otros
tipos de comparaciones. La siguiente tabla muestra las
diferentes expresiones permitidas.
IST ABACO

SINTAXIS IF-THEN

COMPARACIONES

IST ABACO

-eq

IGUAL a

-ne

No es IGUAL a

-lt

MENOS que

-le

MENOS que o IGUAL a

-gt

MAS que

-ge

MAS que o IGUAL a

SINTAXIS IF-THEN

COMPARACIONES

IST ABACO

-s

El archivo EXISTE y no esta VACIO

-f

El ARCHIVO EXISTE y no es un DIRECTORIO

-d

EL DIRECTORIO EXISTE

-x

El ARCHIVO es EJECUTABLE

-w

EL ARCHIVO es LEIBLE

-r

EL ARCHIVO es ESCRIBIBLE

SINTAXIS IF-THEN
Ejemplo 3:
dir=/root/bin

echo "ingresa tu nombre:"


read username
if [ -s ${username}.txt ];

then
EDAD=`cat $dir/${username}.txt`
echo "Tu EDAD es: $EDAD"

else
echo "No se encontro edad para el usuario :( "

fi
IST ABACO

SINTAXIS IF-THEN
Ejemplo 4:
echo "Ingresa tu Edad:"
read edad

if [ "$edad" -lt 20 ] || [ "$edad" -ge 50 ];


then
echo "Lo siento tu EDAD no esta en el rango permitido"
elif [ "$edad" -ge 20 ] && [ "$edad" -lt 30 ];

then
echo "Tienes 20s..."
[ "$edad" -ge 30 ] && [ "edad" -lt 40 ];

elif
then

echo "Tienes 30s"


elif [ "$edad" -ge 40 ] && [ "$edad" -lt 50 ]; then
echo "Tienes 40s"

fi
IST ABACO

ESTRUCTURA BUCLE: WHILE


SINTAXIS WHILE
Siguiendo la misma filosofa del if, se define el bucle while:

while orden a ejecutar


do
orden a ejecutar

done

IST ABACO

SINTAXIS WHILE
EJEMPLO5:
i=0;

while test $i -lt 10


do
echo $i
let i=i+1

done

IST ABACO

SINTAXIS WHILE EJEMPLO6:


rpta=5
correcto=false

while [ "$correcto" != "true" ]


do
echo "Adivina un numero entre el 1 y 10"
read NUM

if [ "$NUM" -lt 1 ] || [ "$NUM" -gt 10 ]; then


echo "El numero debe estar entre 1 y 10"

elif [ "$NUM" -eq "$rpta" ]; then


echo "La respuesta es:$rpta"
correcto=true

else
echo "Respuesta equivocada"

fi
done
IST ABACO

SINTAXIS WHILE
EJEMPLO7:
contador=0

while :
do
sleep 1
contador=`expr $COUNTER + 1`
echo "El programa se ejecutara en $contador seg..."

done

IST ABACO

SINTAXIS FOR

for variable in expreg1 expreg2 ...


do
done

IST ABACO

expregn

SINTAXIS FOR
EJEMPLO 8

for i in `seq 1 5`
do
echo $i

done

IST ABACO

SINTAXIS FOR
EJEMPLO 9

#!/bin/bash
for i in /opt/ejemplos/prueba/*.txt; do
ls -la /opt/ejemplos/prueba/*.txt > /opt/ejemplos/prueba/resultado.txt

done

IST ABACO

SINTAXIS CASE
Es una estructura parecida a la de Pascal, cuando entra en la estructura,
sale cuando empiece la siguiente etiqueta (no as en C, en el que las
etiquetas del case actan como etiquetas de un JMP en ensamblador:
una vez que entran en una etiqueta, no salen del case hasta que ste
acaba completamente).
Las etiquetas pueden ser cualquier ``expresin regular'' (expresin con
comodines tpica de los intrpretes de rdenes; no las expresiones
regulares del vi, el grep, el perl y otros) vlida, con lo que se puede poner
un * como ltima etiqueta del case para actuar como else. Para indicar
que termina el cdigo de una etiqueta determinada, hay que poner al final
de la ltima orden dos signos de punto y coma seguidos.

IST ABACO

SINTAXIS CASE
case valor
in
expreg1)
...
ultimaorden1;;
expreg2)
...
ultimaorden2;;
...
expregn)
...
ultimaordenn;;

esac
IST ABACO

SINTAXIS CASE
EJEMPLO 10:

echo "escoge una numero entre el 1 a 4:"


read resp
case $resp in
1) echo "Eres peruano";;
2) echo "Te gusta el ceviche";;
3) echo "Te gusta estudiar";;
*) echo "Ninguna de las Anteriores";;
esac

IST ABACO

SINTAXIS CASE
EJEMPLO 11:

HOY=$(date +%w)
AYER=$[$HOY -1]
echo "ayer fue:"
case $AYER in
-1) echo "sabado";;
0) echo "domingo";;
1) echo "lunes";;
2) echo "martes";;
3) echo "miercoles";;
4) echo "jueves";;
5) echo "viernes";;
*) echo "ERROR: $AYER no existe";;
esac
IST ABACO

FUNCIONES

Tan pronto como tengamos un programa ms complejo nos


encontraremos con que estamos usando el mismo cdigo en varias
partes y que sera de ms ayuda el darle cierta estructura.
Con esto, podemos reducir nuestro script a la menor cantidad de lineas
posibles.

IST ABACO

FUNCIONES
SINTAXIS
nombredelafuncion()
{
# dentro del cuerpo $1 es el primer argumento dado a la funcin
# $2 el segundo ...

cuerpo
}

IST ABACO

let A=100
let B=200

EJEMPLO

# Funcion suma() Suma los variables A y B


function suma(){
let C=$A+$B
echo "Suma: $C"

}
# Funcion resta() Resta los variables A y B
function resta(){
let C=$A-$B
echo "Resta: $C"

}
suma
resta
IST ABACO

You might also like