jueves, 19 de mayo de 2016

Modelo de programación en GNU/Linux (Parámetros función main).



Modelo de programación en GNU/Linux (Parámetros función main).

Algoritmo de Verificacion de Cedula Ecuatoriana

Para proceder a verificar si un numero de cedula es correcto tenemos que tener en cuenta lo siguiente:

-      La cedula ecuatoriana está formada por los dos primeros dígitos que corresponden a la provincia donde fue expedida, por lo cual los dos primeros números no será mayor a 24 ni menor a 1.

-       El tercer digito es un número menor a 6 (0, 1, 2, 3, 4, 5).

-      Los siguientes hasta el noveno digito son un número consecutivo.

-      Y el décimo digito es el digito verificador.

Los coeficientes usados para verificar el décimo dígito de la cédula, mediante el algoritmo “Módulo 10”

COEFICIENTES = 2.1.2.1.2.1.2.1.2 

   

 Una vez que hayamos entendido el algoritmo para validar la cedula proseguimos a realizar el programa:


Implementamos el código respectivo:

Para empezar con la implementación de nuestro código, lo primero que debemos hacer  es abrir un editor de texto, en nuestro caso haremos uso de gedit  que es uno de los editores de texto de Ubuntu y crearemos un archivo con el siguiente nombre “cedula.c”.
 
Para crear este archivo vamos hasta la consola de nuestro sistema operativo y ponemos:

>>gedit cedula.c &

El & nos permite realizar 2 proceso en el terminal.

Una vez realizado esto observamos lo siguiente en nuestra pantalla:




Ahora, dentro de este archivo vamos a implementar el codigo de nuestro programa que es el siguiente:

/*Programa cédula*/

#include <stdio.h>
#include <stdlib.h>
struct cedula{
    int x;
};
int main(int argc, char *argv[]){
    struct cedula  ced[10];
    int i;
    int sumDigitos=0;
    int numRestar=0;
    int elementoFinal=0;
    if(argc!=11){
        printf("Numero de parametros incorrectos. Use: %s x1 x2 x3 x4 x5 x6 x7 x8 x9 x10\n",argv[0]);
        return -1;
        }
        ced[0].x=atoi(argv[1]);
        ced[1].x=atoi(argv[2]);
        ced[2].x=atoi(argv[3]);
        ced[3].x=atoi(argv[4]);
        ced[4].x=atoi(argv[5]);
        ced[5].x=atoi(argv[6]);
        ced[6].x=atoi(argv[7]);
        ced[7].x=atoi(argv[8]);
        ced[8].x=atoi(argv[9]);
        ced[9].x=atoi(argv[10]);

for(i=0;i<9;i++){
if(i==0){
ced[i].x=ced[i].x*2;
if(ced[i].x>=10){ced[i].x=ced[i].x-9;
}
}
if( (i%2==0) && (i != 0) ){
ced[i].x=ced[i].x*2;
if(ced[i].x>=10){
ced[i].x=ced[i].x-9;
}
}
if( (i%2 != 0) && (i!=0) ){
ced[i].x=ced[i].x*1;
if(ced[i].x>=10){
ced[i].x=ced[i].x-9;
}
}

}


for(i=0;i<9;i++){
sumDigitos=sumDigitos+ced[i].x;
}

if(sumDigitos >=20 && sumDigitos<=29){
numRestar=30-sumDigitos;
}
if(sumDigitos >=10 && sumDigitos<=19){
numRestar=20-sumDigitos;
}
if(sumDigitos >=30 && sumDigitos<=39){
numRestar=40-sumDigitos;
}

printf("\n Comprobacion:\n");
elementoFinal=ced[9].x;
if(numRestar == elementoFinal){
printf("Tu cedula es correcta\n");
}
if(numRestar != elementoFinal){
printf("Tu cedula es incorrecta\n");
}

return 0;
}




Analizando un poco el codigo nos damos cuenta que se hace uso de estructuras, sentencias como el if o el for que ya sabemos como utilizarlas.
como una novedad tenemos lo siguiente:

int main(int argc, char *argv[])

Podemos observar dos argumentos dentro del main:
int argc: Cantidad de argumentos que se envian.
char *argv[]:  Es un vector de cadenas de caracteres.
 
Una vez terminado el codigo lo guardamos y procedemos con la compilacion del programa:
Para esto ponemos el siguiente codigo:
  • gcc -o validarcedula cedula.c
Si el programa no presenta ningun error lo que observamos en pantalla es lo siguiente:



Ahora podemos continuar con la ejecución de nuestro programa y para esto ponemos lo siguiente:
  • ./validarcedula 1 7 2 6 2 6 1 5 0 4 
Y asi podemos seguir probando con disitintos números y verificar si son correctos.


Tambien podemos probar con otro ejemplo para ver el mensaje que nos muestra en caso de no ser correcto el numero.


Y listo, hemos comprobado que nuestro programa funciona a la perfección.



Si nosotros queremos ejecutar nuestro programa independientemente del directorio en el que nos encontremos lo que debemos hacer es modificar nuestra variable PATH. Esta variables contiene un conjunto de rutas de directorios en donde el Shell busca los comandos que hemos ingresado.
Para lo cual ponemos lo siguiente:
PATH=$PATH:/home/danny
Export PATH
Claro que si utilizamos esta forma al momento de que volvamos a iniciar el bash la modificación no se mantiene, por lo que debemos buscar otra manera de editar la variable de manera que la modificación hecha se quede guardada permanentemente.
Para esto vamos a modificar el siguiente archivo:
En nuestro directorio home de usuario vamos a buscar el siguiente archivo:
.bashrc


Ahora vamos a modificar este archivo, lo podemos hacer directamente sin abrirlo con un editor de texto de la siguiente manera:
>> echo "export PATH=$PATH:/home/danny" >> ~/.bashrc




Terminamos aplicando el comando source para recargar el archivo ~/.bashrc:



>> source ~/.bashrc
 
Y listo con estos cambios realizados nuestra variable PATH se guardara de manera permanente.



BIBLIOGRAFIA:

T.Jimenez “Algoritmo de Verificacion de Cedula Ecuatoriana”, (2011).[Online]. Available: http://telesjimenez.blogspot.com/2011/05/algoritmo-de-verificacion-de-cedula.html

HS. Francisco "Añadir un directorio a la variable PATH", Junio (2013). [Online]. Disponible en:
http://yoporlinuxmato.blogspot.com/2013/06/anadir-un-directorio-la-variable-path.html



lunes, 9 de mayo de 2016

Comandos Basicos de GNU/Linux



COMANDOS BASICOS DE GNU/LINUX
Que es el Shell
El Shell es un intérprete de comandos. Es el medio a través del cual el usuario interactúa con el sistema operativo. En GNU/Linux utilizamos el Shell bash.



Sintaxis de comandos en Linux:
·         comando opciones argumentos
Siempre debe existir un espacio entre el comando, las opciones y los argumentos.
Lista de comandos
·         man: Muestra el manual (ayuda) de un comando.





Como podemos ver al momento de escribir el comando man seguido de un comando cualquiera nos muestra la ayuda de este comando.
Para salir de la ayuda del comando presiona la tecla q.
·         clear: El comando clear limpia la pantalla.





·         pwd: Muestra el directorio de trabajo actual.



Como se  puede observar nos muestra el directorio actual.
Siempre que comience con /  es una ruta absoluta. Mientras que una ruta relativa NUNCA empiezan por la / y puede haber varias rutas relativas para el mismo archivo o directorio que queremos indicar. Esto es así porque la ruta relativa depende del directorio en el que se esté trabajando.

Ejemplo:

Acabamos de ver el comando pwd en el cual claramente podemos observar que el resultado es una ruta absoluta.

·         cd: Este comando se usa para cambiar de directorio.
Si ponemos: cd ~ o cd nos mostraran el directorio home del usuario que ha iniciado sesión.
cd .. Va al directorio padre.
Ejemplo:
Ahora nos encontramos en el directorio bin e hicimos uso de una ruta absoluta.
·         ls: Lista todos los archivos que se encuentran dentro de un directorio.

Existen algunas variedades de este comando, a continuación algunas de ellas:
ls –l: Muestra información detallada de los archivos.
ls –a: Muestra todos los archivos incluyendo los ocultos.
ls –t: Ordena por fecha de modificación.


·         mkdir: Crea un nuevo directorio.


Para crear un nuevo directorio solo ponemos el nombre del comando seguido del nombre del directorio que queramos crear.
Haciendo uso del comando ls podemos comprobar si nuestro directorio fue creado correctamente.

Mkdir tiene una opción bastante útil que permite crear un árbol de directorios,  para esto usamos la opción: p


Podemos comprobar esto haciendo uso de los comandos ls y cd.



·         history: Muestra el historial de comandos que han sido utilizados hasta el momento.


Si hemos olvidado alguna acción que realizamos o simplemente queremos hacer uso de un comando que ya hayamos utilizado anteriormente ponemos lo siguiente:
! seguido del número que aparece a lado izquierdo del comando que queramos ver.
Ejemplo:


·         echo: Muestra una cadena de texto o el contenido de una variable en pantalla.



Ahora, si ponemos: echo $?

Este nos mostrara el código de erro del comando anterior, es decir, si este fue ejecutado de manera satisfactoria mostrara un 0 y si no lo fue mostrara un 1.

·         touch: Crea archivos de tamaño 0. Es decir que dentro de tal archivo no existe nada aun.


Podemos editar este archivo haciendo uso de un editor de texto, por ejemplo, nano.
nano archivo1.txt

Para guardar lo que hemos escrito ponemos: ctrl + x. A continuación nos preguntara si queremos guardar, presionamos la tecla y.

Ahora para comprobar vamos a utilizar el siguiente comando:
·         cat: Imprime el contenido de un archivo.
Ejemplo:
Revisemos si el archivo que editamos anteriormente se guardó.


Como podemos ver nos mostró el contenido que anteriormente introducimos en nuestro archivo.

·         cp: Permite copiar archivos.

Ejemplo:
Vamos a mover el archivo1.txt al directorio Ejercicios, podemos hacer uso de una ruta absoluta o de una ruta relativa eso dependerá del directorio en el que nos encontremos.





Queda comprobado que nuestro archivo se copió dentro del directorio que queríamos.

Una variación del comando cp es:
cp –r:  este nos permite copiar directorios.
Ejemplo:
Vamos a crear dos directorios Semana1 y Semana2, dentro del directorio home del usuario y luego copiaremos el directorio Semana2 en el directorio Semana1.





·         mv: Mueve archivos de una carpeta a otra (Renombra).


Una variación de este comando es:
mv –i: Pregunta antes de sobrescribir un archivo existente en el directorio de destino.

  
passwd: Cambiar password de una cuenta de usuario.
cal y date: Muestran calendario y fecha actual.
who: Muestra quienes han iniciado sesion en el sistema.
Ejemplo:
 uptime:Muestra la hora a la que se ingreso al sistema
wc: Permite contar la cantidad de lineas, palabras y letras que tiene un archivo.
wc -l: muestra el numero de lineas.
wc -w: Muestra la cantidad de palabras.

ps: Lista los procesos que han sido lanzados desde el shell
ps -aux: Lista todos los procesos
ps axo para observar lo que se requiera
Ejemplo: ps axo pid,ppid
pgrep: Muestra el pid de un proceso.
 
tr: El comando tr dado un flujo de datos (entrada estándar) nos permite modificarlos sustituyendo y/o borrando carácteres.
Ejemplo:

~$ echo 'una         frase muy    tonta pero valdrá' | tr -s ' '
 una frase muy tonta pero valdrá

grep: Nos ayuda cuando necesitamos encontrar dentro de una lista algo especifico.
Ejemplo:

 donde los campos son los siguientes: el nombre de usuario, clave, identificador de usuario, indentificador de grupo, directorio home del usuario, shell que emplea el usuario.

Operadores de redireccion:
> se sobreescribe
>> se escribe al final del archivo
2> salida de error 
 
chmod: Permite cambiar de permisos del usuario, grupo u otros.(u,g,o)
Permisos de:
Lectura: 4
Escritura: 2
Ejecucion: 1
+ para anadir permisos.
- para quitar permisos.

APT: Gestor de paquetes
apt-get update
apt-get install
apt-cache search

diff: Compara dos archivos.
bzip2: Comprime un archivo.
bzip2 -v permite ver la informacion que se esta compirmiendo.
bunzip2: Descomprime un archivo.
bzcat: Muestra el contenido del archivo comprimido.
gzip: Genera archivos .gz
gunzip: Desomprime.
tar: Permite empaquetar varios archivos y/o directorios en uno.

tar -cvf
tar -tvf: lista el contenido del archivo empaquetado
tar -xvf: desempaqueta los archivos
tar -xzvf: descomprime y desempaqueta.

sleep: El comando sleep se utiliza para temporizar un intervalo de tiempo determinado. La unidad de tiempo por defecto es el segundo.
Ejemplo:
ls -l; sleep 2; pwd; sleep 3; clear 

at: At ejecuta un comando o programa a determinada hora determinado día. Su sintaxis es bastante sencilla.
Ejemplo:

El comando que va entre comillas luego de echo es el que se ejecutará a la hora indicada. Si deseamos hacerlo a las 23:11, pero de mañana, ejecutamos:
echo “wget http://www.empresa.com/archivo.txt&#8221; | at 23:11 tomorrow

cron y crontab: Cron ejecuta comandos y/o programas a determinados momentos de acuerdo a lo que cada usuario ha configurado en crontab (archivo en donde se guardan las tareas programadas). Es posible ejecutar programas en forma diaria, semana, mensual, etc.

 Para utilizar crontab:

Para agregar una tarea o modificar alguna, editamos el archivo crontab con el comando:
crontab -e
Abrirá el editor de textos Nano para modificar el archivo (para salir y guardar los cambios CTRL + X). Las entradas en el archivo siguen el siguiente formato:
Por ejemplo, deseamos ejecutar un script todos los días a las 23:30Hrs
30 23 * * * /home/usuario/mi_script.sh
Cada * significa “cualquiera”, es decir, se ejecutará a las 23:30 de cualquier día, cualquier mes y cualquier día de la semana.
Si es que deseamos ejecutar un script todos los martes 13 a la 1am:
00 01 13 * 2 /home/usuario/script-martes-13.sh
El 13 indica el decimotercer día del mes, el * que le sigue indica que es cualquier mes y el 2 siguiente indica que se ejecute sólo los días martes (los días de la semana se numeran empezando con 1 para Lunes y terminando con 7 para domingo), así, si el 13 de enero cae jueves, no se ejecutará el script, pero si el 13 de abril cae martes, lanzará el script.


Bibliografía:


  •    C. Deffaix Remy, “Introducción”, Programación Shell en Unix/Linux, Editorial ENI, Tercera Edición, Barcelona, Mayo 2015, pp 19.