Consultas, desarrollo de programas y petición de presupuestos:

jueves, 12 de julio de 2012

Let / Case / ejemplos de script

Comando let
let sustituye (( ))
ejemplo:
let “x = x * 10” es lo mismo que (( x = x * 10 ))


Sustitución de expresiones aritmeticas $((x=x+1)


Correpcion de script: la depuración
Exite como modalidad de “seguimiento” de lo que estamos ejecutando:
set -x (activar la opcion)
set +x (desactiva la opcion)

set -n (procesa la linea pero no la ejecuta, (procesar: sustituye la variables, patrones, caracteres comodin, pero no la ejecuta)).
Ventaja que tiene es ver como se esta sustituyendo las cosas, pero si falla el script se para, de esta manera al o ejectarse, no altera lo que haria el escrit (mover el archivo, borrarlo), y podemos ver hasta final.


Case:

En C
En script
Switch
Case $variable in
Case 1:
patron1)
Break;
;;
Default
*)


;;
}
esac

Ejercicio:
Hacer script existe_usuario recibe como argumento un nombre de usuario. El script muestra por pantalla si el usario existe o no en el sistema.

#!/bin/bash
#para hacer depuracion
set -x
#comprobamos el nº de argumentos ($#) que han puesto (si es distinto a 1 salir diciendo que es error)
if [[ $# != 1 ]]; then
echo "Cantidad de argumentos no valida"
exit 1
fi
#1 opcion:

#grep devuelve 0 si ha encontrado algo, y muestra las lineas que ha encontrado. Las lineas que ha encontrado las podemos enviar a >/dev/null para que no las muestre .
#si falla devolvera no 0
#if grep $1 /etc/passwd > /dev/null ; then
#
#echo "existe suario"
#else
#echo "no existe usuario"
#fi
#otra forma seria (2º variante)
variable=$(cat /etc/passwd |cut -d : -f1 |grep $1)
#en variable tengo la salida de pantalla del comando
if [[ $variable = "" ]]
then
echo "no existe usuario"
else
echo "si es un usuario"
fi


Ejercicio:
Pedir dos numeros por teclado y mostrar cual es mayor

#!/bin/bash
echo "Comparar dos numeros"
echo "pon un numero:"
read numero1
echo "pon el 2º numero:"
read numero2
# test y su mejora [[ ]], el simbolo > maneja datos de tipo texto, con lo cual lo ordena alfabeticamente. (y da problemas con los numeros negativos.
# , teniamos que usar -gt para manejar numeros
# La solucion mas simple, usar mejor (( )) que resuelve expresiones
if (( $numero1 > $numero2 ))
then
echo "el $numero1 es mayor que el $numero2"
elif (( $numero1 < $numero2 ))
echo "el $numero1 es menor que el $numero2"
else
echo “Son iguales”
fi
exit 0

Ejercicio:
Vamos a mostrar la cantidad de archivos con extensión .c, en el directorio que se indique.

#!/bin/bash
echo "Vamos a mostrar la cantidad de archivos con extensión .c, en el directorio que se indique."
echo "Pon el directorio:"
read directorio
ls -1 $directorio*.c >listado.txt
salida=$(wc -l listado.txt )
echo "Numero de archivos:"
echo $salida | cut -d " " -f 1

No hay comentarios:

Publicar un comentario