Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pgina: 1
SESIN 6:
II
TEMAS A TRATAR
Operaciones aritmticas
Comando test
Estructuras controladas
Uso de funciones
III
MARCO TEORICO
Operaciones Aritmticas
El comando 'expr' se usa en condicionales tanto simples como mltiples, o para
simplemente hacer operaciones aritmticas. Los operadores son los tpicos de
operaciones aritmticas: suma (+), resta (-), multiplicacin (\*), divisin (/) y modulo
(%).
Sintaxis: expr [operando1] operador [operando2]
Evaluacin de cadenas
Para evaluar cadenas, ya sean cadenas de texto, ficheros, o nmeros, tenemos el comando
'test' el cual nos permite de una forma rpida y fcil comparar o comprobar cualidades o
valores de las cadenas evaluadas.
Este comando se suele abreviar usando solo corchetes: [cadena valor cadena] y
suprimiendo el propio comando 'test', dentro de un 'if', 'case', 'until', 'for' etc. o
simplemente para definir una variable.
Mgter. Karim Guevara Puente de la Vega, Ing. Eveling Castro Gutierrez
Sesin 06
Pgina: 2
c) Evaluacin de nmeros
Para evaluar nmeros, tenemos las siguientes opciones o parmetros:
-lt
menor que ...
-le
menor o igual
-gt
mayor que ...
-ge
mayor o igual
-eq
igual
-ne
no igual
Estructuras Controladas
Existen dos estructuras primarias para controla la programacin del shell: estructuras de
decisin y estructuras iterativas.
1. Estructura if
La estructura ifthenelsefi es una estructura de decisin que le permite
seleccionar entre dos posibilidades de accin, segn el resultado de un comando. La
sintaxis es:
if condition ;
then
statement;
...
else
statement;
...
fi
Sesin 06
Pgina: 3
2. case
La estructura case es una estructura de decisin que le permite seleccionar una entre
varias posibilidades de accin, segn el valor de una variable. Su sintaxis es:
case word in
pattern) statement(s);;
pattern) statement(s);;
...
...
esac
el parmetro word se compara con cada uno de los parmetros pattern. Las
instrucciones se ejecutan si word coincide con un patrn, se termina con dos signos
;. El final de la instruccin case viene marcada por la palabra clave esac.
3. Uso de estructuras iterativas
Las estructuras iterativas de control le permiten escribir archivos de secuencias que
contienen bucles como son for y while.
Estructura for
for x in a b c
do
command;
command;
...
done
Estructura while
while condition
do
command;
command;
...
...
done
Estructura until
Comando 'until'.'hasta' Negacin de while.
until [ condicin ]
do
command;
done
Funciones
Una funcin es un trozo de cdigo que se utilizara con frecuencia en un script, y que solo
varia en una variable. Sintaxis:
nombre_funcion() {
cdigo a ejecutar en la funcin
}
Sesin 06
Pgina: 4
IV
ACTIVIDADES
1. Trabajando con expresiones aritmticas:
El siguiente ejemplo nos permite comprender como se debe de expresar una
operacin aritmtica
#Ejemplo de expr (el cuadrado de un numero)
echo "Dame un numero."
read numero
resultado=`expr $numero \* $numero`
echo "El resultado de el cuadrado de $numero es $resultado"
2. Nmeros aleatorios
Para generar un nmero aleatorio se utiliza la variable $RANDOM. Esta genera un
nmero aleatorio de entre 1 y 32000.
Por ejemplo, el siguiente script genera un nmero aleatorios hasta 48:
# aleatorio con random
alea=`expr $RANDOM % 49` # generamos un numero
aleatorio1=`expr $alea + 1`# nos aseguramos que no sea 0 sumndole 1
alea=`expr $RANDOM % 49` # el segundo ..
aleatorio2=`expr $alea + 1`
alea=`expr $RANDOM % 49`
aleatorio3=`expr $alea + 1`
alea=`expr $RANDOM % 49`
aleatorio4=`expr $alea + 1`
alea=`expr $RANDOM % 49`
aleatorio5=`expr $alea + 1`
alea=`expr $RANDOM % 49`
aleatorio6=`expr $alea + 1`
echo "Copia estos numeros:"
echo " $aleatorio1 - $aleatorio2 - $aleatorio3 "
echo " $aleatorio4 - $aleatorio5 - $aleatorio6 "
3. Aritmtica integrada
El shell provee un mecanismo para realizar aritmtica de enteros bsica llamado
"expansin aritmtica". Este tipo de expansin no est disponible en shells mas
Mgter. Karim Guevara Puente de la Vega, Ing. Eveling Castro Gutierrez
Sesin 06
Pgina: 5
antiguos (como Bourne shell, donde se tiene que utilizar el comando expr). La
expansin aritmtica est basada en un estndar POSIX, as que es posible encontrar
esta caracterstica en la mayora de shells modernos.
El formato para la expansin aritmtica es:
$((expresion))
Adiciona uno al valor de la variable i y despliega el resultado. Hay que notar que la
variable i no tiene que ser precedida por el signo $, esto es porque el shell sabe que
las nicas cuestiones vlidas en una expansin aritmtica son valores, variables y
operadores (+ - * /), entonces, al evaluar el carcter i y definir que no es un valor
numrico (0 a 9) ni un operador matemtico, entonces seguramente es una variable.
Si la variable no ha sido definida o su valor es nulo (contiene una cadena nula,
espacios o valores alfanumricos) se define que el valor de la variable es cero. Por
ejemplo, an cuando no hemos definido la variable Z ni asignado ningn valor a la
misma, aun se puede utilizar en una expansin aritmtica:
$echo $((Z+10))
10
$
o en la siguiente:
$ echo $((Z=Z+1))
1
$
Sesin 06
Pgina: 6
Si lo ejecutamos as:
$ . script6 uno uno
0
$
O:
$ . script7 script10
1
$
Sesin 06
Pgina: 7
Ejecutando el script:
$ . adivinador
Adivina mi numero:
3
0
$ . adivinador
Adivina mi numero:
2
1
$
d) Veamos un ejemplo con el script anterior para ver el uso del if:
# adivinador mejorado con if
echo "Adivina mi numero:"
read adiv
aleatorio=`date +%S`
aleatorio=`expr $aleatorio % 5`
if [ $aleatorio -eq $adiv ] ;
then
echo "has acertado!!"
else
echo "has errado!!"
fi
Si lo ejecutamos:
$ . adivinador2
Adivina mi numero:
3
has errado!!
$
Si ejecutamos nuestro script, evaluando por ejemplo dos de los script que hemos
creado hasta ahora:
$ . ficheromayor /home/g100/script1 /home/g100/script7
/home/g100/script7 es mayor
$
Sesin 06
Pgina: 8
f) Un ejemplo ms:
archivo="archivo_no_existe"
if [ -f $archivo ]; then
echo "el archivo $archivo no existe"
else
echo "el archivo $archivo si existe"
fi
Sesin 06
Pgina: 9
Si ejecutamos el script:
$ ./prueba 44 45
44 es menor que 46
45 es menor que 46
$
k) Un pequeo ejemplo que usa el ciclo while para desplegar nmeros del cero al
nueve:
x=0
while [ $x -lt 10 ]
do
echo $x
x=$((x+1))
done
Sesin 06
Pgina: 10
Para ejecutarlo:
$
4
6
8
$
./script13 4 9
es par !!
es par !!
es par !!
o) Las funciones tambin son uno recurso muy usado. Para entender mejor, veamos
el siguiente ejemplo:
# determina par e impar de los nmeros que introduzcamos dinmicamente
determinaPar() {
num=`expr $a % 2`
if [ $num -eq 1 ];then
echo "impar ; $a"
else
echo "par: $a"
fi
}
echo "Dame tres nmeros"
read a1
read a2
read a3
export a=$a1
determinaPar
export a=$a2
determinaPar
export a=$a3
determinaPar
Si lo ejecutamos:
$ . script12
Dame tres numeros
700
75
12346
par: 700
impar: 75
par: 12346
$
Sesin 06
Pgina: 11
V
EJERCICIOS
Los ejercicios de esta sesin los guardar en el directorio bin creado en la sesin anterior
01. Agregue la ruta del directorio bin a la ruta de bsqueda
02. Ejecute el siguiente Shell script el cual ingresa en el archivo logfile nombres con la
fecha y hora actual
#Nombre: names.sh
NOW=date + %Y%m%d%H%M%S
echo Ingresa nombres. Termina con Ctrl+d cuando finalices
while read line
do
echo $NOW: $line>>$HOME/logfile
done
03. Escriba un Shell script que muestre todos los nombres ingresados en el archivo
logfile con la fecha actual.
04. Ejecute el siguiente guion y describa su funcionamiento y resultados:
#Nombre: recent.sh
case $# in
0) ls lt | head ;;
1) case $1 in
[0-9]*) ls lt | head -$1;;
*)
echo Uso: nro de archivos recientes;;
esac;;
*) echo Uso: nro de archivos recientes;;
esac
06. Escriba un Shell script en el cual se determine si un usuario dado est conectado o no
al sistema.
07. Modifique el guion anterior para determinar en cuntas terminales est conectado un
usuario determinado.
08. Suponga que a cualquier usuario excepto el root, slo se le permite acceder al
sistema mximo 3 veces, de lo contrario no se debe de permitir que se loguee las
Mgter. Karim Guevara Puente de la Vega, Ing. Eveling Castro Gutierrez
Sesin 06
Pgina: 12
siguientes veces. Para cada una de las veces permitidas se le debe de dar la
bienvenida correspondiente de acuerdo a la hora de ingreso. (ver ejercicio 5).
09. Cierre el sistema.
VI
BIBLIOGRAFIA Y REFERENCIAS
Blanco, V., Linux Instalacin, Administracin y uso del Sistema, Ed. Ra-Ma,
Mxico, 2001.
http://users.exa.unicen.edu.ar/~hcurti/linux/index.html
Sesin 06