jueves, 12 de diciembre de 2013

Programación shell en sistema operativo

Sistema operativo I

Contador de 20 a 10

#!/bin/bash
contador=20
until [ $contador -lt 10 ]; do
echo contador $contador
let contador-=1

done



contador de 1 a 10

#!/bin/bash
contador=0
while [ $contador -lt 10 ]; do
echo El contador es $contador
let contador=contador+1
done

Números igual o mayor que el otro

#!/bin/bash
clear
echo ¿Ingrese los numeros?
echo "Introduce el primer numero"
read var1
echo "Introduce el segundo numero"
read var2
resultado=`expr $var1 = $var2`
if [ ${resultado} = 1 ];
then
echo "Son iguales"
else
echo "No son iguales"
fi
if [ ${var1} -gt ${var2} ];
then
echo ${var1} es mayor
else
echo ${var2} es mayor
fi

miércoles, 17 de abril de 2013

Shell


¿Qué son las Shells?
Podríamos decir que el Shell es un material que se halla entre el núcleo del sistema y el mundo exterior. A pesar que muchos usuarios piensan que un Shell es solo interprete de comandos interactivo. Un shell es realmente un lenguaje de programación en el cual cada sentencia corre un comando. Es un lenguaje fuera de lo común ya que debe satisfacer dos aspectos importantes:
1.      Interactividad.
2.      Programación de la ejecución de un programa.

Pequeña historia sobre las Shells
Actualmente existen varios tipos de Shell, sin embargo, la Bouner Shell fue la primera usada para propósitos generales.
Al principio, era muy limitada, así que solo se usaba como una herramienta para correr otras herramientas. Existían las variables, ciclos, y sentencias Unix y sus derivados, incluyen la Bouner Shell. Y la mayoría de las Shell actuales, son derivadas de esta.

Steve Bouner, creador de la Bouner Shell

Tipos de Shell
Al igual que las distribuciones de Linux, existen varios tipos de Shells, cada una orienta a satisfacer diferentes necesidades que los diferentes tipos de usuarios pudieran tener. Por mencionar algunas:
 1.      C Shell
 2.      Korn Shell
 3.      Bouner Again Shell

La Shell es
Un programa que actúa como interfaz entre el usuario y el sistema operativo.
Un software que atiende las ordenes tecleadas por el usuario y las traduce a instrucciones en la sintaxis interna del sistema.
Es afortunadamente algo más que un intérprete de comandos. Entre sus funciones destacan:
 1.      Interpretar, ejecutar órdenes y comandos.
 2.      Configurar el entorno.
 3.      Asignar valores a variables.
 4.      Sustituir variables por su valor.
 5.      Re direccionar entradas y salidas.
 6.      Generar nombres de archivos.
 7.      Encauzar listas de órdenes o tuberías.
 8.      Es un completo lenguaje intérprete de programación.

Operadores de comparación de cadenas
 S1 = s2
 s1 coincide con s2
 s1 != s2
 s1 no coincideco s2
 s1 < s2
 s1 es alfabéticamente anterior a s2, con el local actual
 s1 > s2 es alfabéticamente posterior a s2, co el local actual
 -n s1
 s1 no es nulo (contiene uno o mas caracteres)
 -z s1
 si es nulo

domingo, 14 de abril de 2013

Estaciones del año


Estación

#!/bin/bash
clear
# Indica la estación del año aproximada segun el mes
case $1 in
diciembre|enero|febrero) echo Verano;;
marzo|abril|mayo) echo Otoño;;
junio|julio|agosto) echo Invierno;;
septiembre|octubre|noviembre) echo Primavera;;
*) echo este mes no existe;;
esac

Horóscopo chino


Horóscopo

#!/bin/bash
clear
read -p "En que ano naciste (usa 4 cifras) : " ANO
let RESTO=ANO%12
case $RESTO in
0) AN="el MONO" ;;
1) AN="el GALLO" ;;
2) AN="el PERRO" ;;
3) AN="el CERDO" ;;
4) AN="la RATA" ;;
5) AN="el BUEY" ;;
6) AN="el TIGRE" ;;
7) AN="el CONEJO" ;;
8) AN="el DRAGON" ;;
9) AN="la SERPIENTE" ;;
10) AN="el CABALLO" ;;
11) AN="la CABRA" ;;
*) echo "Imposible, el resto de dividir entre 12 va de 0 a 11 siempre."
esac
echo "Si naciste en $ANO según el horóscopo chino te corresponde" $AN

miércoles, 10 de abril de 2013

Programa que suma los número pares y multiplica los impares


Este programa lee la cantidad de n número donde suma los números pares y multiplica los números impares

#!/bin/sh
clear
read -p "Ingrese un numero: " num
suma=0
multi=1
for i in $(seq 1 $num); do
echo "número:" $i
read nume
if [ $(($nume%2)) -eq 0 ]; then
suma=$(($nume+$suma))
else
multi=$(($nume*$multi))
fi
done
echo La suma de los números par es: $suma
echo La multiplicación de los número impar es: $multi

sábado, 6 de abril de 2013

Programando en Shell


Programa que imprime 5 números
#!/bin/sh
for i in $(seq 1 5); do
echo $i
done

Tabla de multiplicación
#!/bin/sh
echo Digite un numero
read num
for i in $(seq 1 12); do
echo $num x Si = $(($num*$i))
done

Dos formas diferentes de for
#!/bin/sh
echo Ingrese un nombre
read nom
for i in $(seq 1 8); do
echo $i=$nom
done

#!/bin/sh
for i in $(seq 1 10); do
echo Soy ingeniero
done

Hacer un programa con el while

#!/bin/sh a seq 1 5
i=1
while [ $i -lt 6 ]; do
echo $i
i=$(($i+1))
done

Programa que diga si un número es positivo o negativo
#!/bin/sh
echo Ingrese un numero
read i
if [ $i -gt -1 ]; then
echo $i es positivo
else
echo $i es negativo
fi

Programa que diga si un número es mayor de 100
#!/bin/sh
echo Ingrese un numero
read i
if [ $i -ge 100 ]; then
echo $i es mayor que 100
else
echo $i es menor que 100
fi

Programa que diga si un número es divisible entre 101
#!/bin/sh
echo Ingrese un numero
read i
if [ $(($i%101)) -eq 0 ]; then
echo $i es disible entre 101
else
echo $i es no disible entre 101
fi

Programa que diga si un número es par o impar
#!/bin/sh
echo Ingrese un numero
read i
if [ $(($i%2)) -eq 0 ]; then
echo $i es par
else
echo $i es impar
fi

Programa que la cantidad de n número y que diga cuales son pares e impares
#!/bin/sh
echo Ingrese un numero
read num
for i in $(seq 1 $num); do
echo número
read nume
if [ $(($nume%2)) -eq 0 ]; then
echo el número es par
else
echo el número es impar
fi
done



Programa que imprime una frase al revés
#!/bin/bash
echo “Introduce una frase”
read frase
esarf=””
for ((i=$((${#frase}-1));i>=0;i--)) {
esarf=${esarf}${frase:$i;1}
}
echo “’${frase}’ al revés es ‘${esarf}’”

Hacer un programa que lee 10 números donde sume los números pares y multiplique los impares

Hacer un programa que imprima uno de los días de las semanas

Comando de Linux en comparación del DOS

jueves, 4 de abril de 2013

Sentencia case

Se utiliza cuando para los distintos valores de una variable o expresión existen distintos conjuntos de sentencias a ejecutar, por eso recibe el nombre de Sentencia Alternativa Múltiple  La sentencia Case tiene el siguiente formato:

#!/bin/sh
clear
read -p "Invocar con numero del 0 al 6: " dia
case $dia in
0) di="Domingo" ;;
1) di="Lunes" ;;
2) di="Martes" ;;
3) di="Miércoles" ;;
4) di="Jueves" ;;
5) di="Viernes" ;;
6) di="Sabado" ;;
*) di="Un dia raro, pues no existe" ;;
esac
echo "El dia es" $di

martes, 2 de abril de 2013

Programa que imprime una frase al reves



#!/bin/sh
clear
read -p "Introduce una frase" frase
longitud=${#frase}
while [ $longitud -ge 0 ]; do
esarf=${esarf}${frase:$longitud:1}
longitud=$((longitud-1))
done
echo $frase "al revés es" $esarf

La salida que dará este programa será la siguiente:


Introduce una frase: Permisos de archivos
Permisos de archivos al reves es sovihcra ed sosimreP


domingo, 31 de marzo de 2013

Permisos de archivos

Los permisos de acceso son las protecciones que se le pueden asignar a un archivo. Estas protecciones pueden proteger los archivos de cualquier usuario de que sean leídos a escritos por gente no autorizada, incluso se pueden proteger los archivos de que sean alterados por su mismo propietario (por ejemplo para evitar que los borre accidentalmente).

Hay tres tipos de usuarios que pueden acceder a un archivo:

u (user, owner) el dueño del archivo.
g (group) el grupo al que pertenece el dueño del archivo.
o (other) todos los demás.

Un usuario puede intentar acceder a un archivo sencillo de tres maneras intentando leerlo, escribir en el o ejecutarlo, estos tres accesos son:

r (read) lectura; examinar, copiar datos de un archivo.
w (write) escritura; modificar, borrar un archivo.
x (excute) ejecutar; usar el archivo como un comando.

El dueño de un archivo controla que usuarios tienen permiso de acceso y de que manera pueden hacerlo: el comando ls -l  despliega los permisos de acceso asociados a un archivo, el primer campo de 10 caracteres describe los permisos asociados a ese archivo, un campo típico se ilustra a continuación.

rwx r-x r-w

De las nueve columnas, las tres primeras representan los derechos del usuario, los siguientes tres son los derechos del grupo, y los últimos tres son los derechos de todos los demás. Una letra en el campo significa que el permiso no esta concedido.

Ciclo for


Un ciclo es la repetición de un conjunto de instrucciones. Dicho ciclo culmina cuando se cumple una condición de término. El grupo de instrucciones se pueden ejecutar un número conocido o desconocido de veces.



Ciclo For: En este ciclo el número de veces que se repite el conjunto de instrucciones es conocido, y el control de la repetición es asumido por un conjunto de variables de control. El esquema siguiente representa esta estructura en diagrama de flujo y pseudocódigo. Las variables de control se inicializan en un determinado valor, el cual aumenta o disminuye de acuerdo un salto definido, hasta llegar a un valor final.

Ejemplo

#!/bin/sh
clear
echo "Digite un numero"
read num
for i in $(seq 1 12); do
echo $num"x"$i"="$(($num*$i))
done

la salida que tendrá será la siguiente:

sh tabla


Digíte un número: 5

5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
5 x 10 = 50
5 x 11 = 55
5 x 12 = 60

sábado, 30 de marzo de 2013

Sentencia If

La sentencia if se utiliza para comprobar una condición y si la condición es verdadera entonces procesaremos un bloque de sentencias (llamado bloque if), u otro bloque de sentencias alternativas (llamado bloque else). La cláusula else es opcional.

Por ejemplo:

#!/bin/sh
read < Expresión a leer>
if [ Expresión a evaluar ]; then
echo "Lo que haya que hacer si la expresión evaluada devuelve Verdadero"
fi

Esta forma la utilizamos cuando tenemos dos condiciones a realizar, si una es Verdadera y la otra si es Falsa

ejemplo:

#!/bin/bash
read -p "Ingresa tu edad: " edad
if [ $edad -ge 18 ]; then
echo "es mayor de edad"
else
echo "es menor de edad"
fi

Esta forma la utilizamos cuando tenemos dos preguntas a evaluar

ejemplo:


#!/bin/sh
read -p "Ingrese un numero: " i
if [ $i -eq 100 ]; then
echo $i "es igual que 100"
elif [ $i -gt 100 ]; then
echo $i "es mayor que 100"
else
echo $i "es nemor que 100"
fi


Clik aquí para descargar programas con el if


viernes, 29 de marzo de 2013

Programa que imprime una fecha en programación Shell


#!/bin/bash
clear
read -p "introduce el día " dia
read -p "introduce el mes " mes
read -p "introduce el año " ano
bisierto=$(($ano%4))
if [ $mes -gt 12 -o $ano -lt 0 ]; then
echo "Error la fecha no es correcta"
elif [ $dia -gt 31 -o $dia -lt 1 ]; then
echo "Error de día"
elif [ $mes -eq 1 ]; then
echo $dia" de Enero de "$ano
elif [ $mes -eq 3 ]; then
echo $dia" de Marzo de "$ano
elif [ $mes -eq 5 ]; then
echo $dia" de Mayo de "$ano
elif [ $mes -eq 7 ]; then
echo $dia" de Julio de "$ano
elif [ $mes -eq 8 ]; then
echo $dia" de Agosto de "$ano
elif [ $mes -eq 10 ]; then
echo $dia" de Octubre de "$ano
elif [ $mes -eq 12 ]; then
echo $dia" de Diciembre de "$ano
elif [ $dia -gt 30 -o $dia -lt 1 ]; then
echo "Error de día"
elif [ $mes -eq 4 ]; then
echo $dia" de Abril de "$ano
elif [ $mes -eq 6 ]; then
echo $dia" de Junio de "$ano
elif [ $mes -eq 9 ]; then
echo $dia" de Septiembre de "$ano
elif [ $mes -eq 11 ]; then
echo $dia" de Noviembre de "$ano
elif [ $dia -gt 29 -o $dia -lt 1 -o $bisierto -eq 0 ]; then
echo $dia" de Febrero de "$ano
elif [ $mes -eq 2 ]; then
echo "Erro de día"
elif [ $dia -gt 28 -o $dia -lt 1 ]; then
echo "Error de día"
elif [ $mes -eq 2 ]; then
echo $dia" de Febrero de "$ano
fi

jueves, 28 de marzo de 2013

Comandos de Linux


Comandos internos de Bash
Un comando interno de bash es un comando que bash implementa y que ejecuta sin llamar a comandos externos. Por ejemplo, echo es un comando interno de bash y cuando se llama desde un script no se ejecuta el fichero /bin/echo.
Esta es una lista de algunos de los comandos internos más utilizados:
echo
Envía una cadena a la salida estándar, normalmente la consola o una tubería.
read
Lee una cadena de la entrada estándar y la asigna a una variable:
echo -n "Introduzca un valor para var1: "
read var1
echo "var1 = $var1"
cd
Cambia de directorio
pwd
Devuelve el nombre del directorio actual, equivale a leer el valor de la variable $PWD.
pushd popd dirs
pushd apila un directorio en la pila de directorios. popd lo desapila y cambia a ese directorio. dirs muestra el contenido de la pila. Estos comandos son muy útiles cuando un script tiene que navegar por un arbol de directorios.
let
Realiza operaciones aritméticas:
let a=$b+7
export
Hace que el valor de una variable esté disponible para todos los procesos hijos de la shell.
. source
Estos dos comandos hacen que la shell cargue otro fichero. Es equivalente a #include en C/C++.
exit
Finaliza la ejecución del script, recibe como argumento un entero que será el valor de retorno del script.
ps
Ofrece un listado de los procesos que hay corriendo en la máquina, con diversa información sobre los mismos.
fg
Devuelve un proceso que estaba ejecutándose en segundo plano al primer plano.
wait
Detiene la ejecución hasta que los procesos que hay en segundo plano terminan.
kill
Envía una señal a un proceso, normalmente para terminarlo.

Comandos y filtros externos
En los scripts de shell es muy comúm hacer un uso extensivo de un conjunto de filtros y comandos externos que realizan tareas específicas con una enorme potencia. Muchos de estos comandos son filtros de texto que reciben un flujo de texto (normalmente por la entrada estándar) y lo modifican de alguna forma, devolviendo el flujo modificado a la salida estándar.
Comandos comunes
ls
Lista los contenidos de un directorio.
cat
Imprime los contenidos de un fichero en la salida estándar. Se suele combinar con redirecciones para filtrar los contenidos. tac (cat al revés) imprime los contenidos en orden inverso.
cp
Copia un fichero, grupo de ficheros o directorios.
mv
Mueve un fichero, ficheros o directorio a otra ruta.
rm
Elimina un fichero o ficheros.
mkdir
Crea un directorio.
rmdir
Elimina un directorio.
chmod
Cambia los permisos de un directorio.
ln
Crea un enlace a un fichero o directorio.
find
Busca ficheros según su nombre dentro de un arbol de directorios.
Filtros de texto
sort
Ordena el las línas de texto por orden ascendente o descendente.
uniq
Elimina las lineas repetidas.
expand
Convierte los tabs en espacios.
unexpand
Convierte los espacios en tabs.
cut
Extrae campos de las lineas.
colrm
Elimina columnas de las lineas.
paste
Junta los ficheros por columnas.
head
Imprime sólo las primeras líneas de la entrada.
tail
Imprime sólo las últimas líneas de la entrada.
grep
Imprime sólo las líneas que coincidan con cierto patrón, el patrón puede ser una simple cadena o una expresión regular.
Comandos que trabajan con ficheros
tar
Archiva grupos de ficheros en uno solo. Se suele combinar con gzip o bzip2 para crear paquetes comprimidos de varios ficheros.
gzip gunzip
Comprimen y descomprimen ficheros.
bzip2 bunzip2
Comprimen y descomprimen ficheros.
strings
Busca cadenas dentro de ficheros binarios.
basename
Devuelve el nombre de un fichero por sí sólo, sin información sobre su ruta.
dirname
Devuelve la ruta de un fichero, quitando su nombre y dejando solamente el directorio.
install
Copia un fichero, permitiendo especificar permisos y dueño del mismo. Útil para instalar software. 

martes, 19 de marzo de 2013

Breve historia de Linux

Historia de Linux
Linux, el núcleo o kernel de GNU/Linux, se desarrolló originalmente como un proyecto que Linus Torvalds emprendió en su tiempo libre.
Se inspiró en Minix, un sistema Unix básico desarrollado por Andy Tanenbaum. Las primeras discusiones acerca del núcleo Linux tuvieron lugar en el grupo de noticias de Usenet comp.os.minix.
Estas discusiones se centraban sobre todo en el desarrollo de un sistema pequeño y académico de Unix para usuarios de Minix que querí­an algo más. 
El primitivo desarrollo del núcleo Linux se centró en las caracterí­sticas multitarea del interfaz en modo protegido del 80386, escrito en código ensamblador.
Nunca se hizo un anuncio de la versión 0.01. Las fuentes del 0.01 ni siquiera eran ejecutables.
Contení­an sólo los rudimentos básicos de las fuentes del núcleo y daban por supuesto que se tení­a acceso a una máquina con Minix para compilarlas y experimentar con ellas. 
El 5 de octubre de 1991 Linus anunció la primera versión "oficial" del núcleo Linux, la versión 0.02.
En este punto, Linus podí­a ejecutar bash (el GNU Bourne Again Shell) y gcc (el compilador C GNU) pero no mucho más. De nuevo, estaba pensado como un sistema para hackers. 
La orientación principal fue el desarrollo del núcleo; el soporte de usuarios, la documentación y la distribución todaví­a no habí­an sido atendidos. Aún hoy, la comunidad parece que trata estas cosas como secundarias frente a la "programación de verdad" (el desarrollo del núcleo).

Versiones comerciales
Las versiones comerciales tiene licencia de AT&T y de BSD Actualmente existe en el mercado siguientes versiones: HP Vx - ATX - Solaris - SCO - comprado por Microsoft.

Arquitectura
1) El Kernel administra memoria, procesos y la entrada y salida.
2) El Shell es el intérprete de comandos.
3) Hardware: cada vez que se egrega hardware el kernel se recopila y es transparete.

Caráteristicas del sistema Unix
A) Multiusuario.
B) Multitarea.
C) Multiproceso.
D) Comunicación de datos.
E) Administrador de red nativo.
F) Biblioteca de rutina en C.

Requerimiento de Hardware
a. PC 386 o superior
b. RAM 8 MB

Sistema de Archivos
a. Estructura de árbol
b. estructura de Archivos y Directorios