web by spit
spit - programacion Shell script unix
  UNEFA-NUCLEO-GUACARA-SECCION G-015-D
  CONTACTO (deja tu correo)
  Libro de visitantes
  tutoriales
  => como hackear paginas web
  => manual del troyano netbus para torpes
  => manual sobre el troyano subseven
  => manuales del backoriffice para torpes
  => informacion sobre troyanos
  => programacion Shell script unix
  => Manual del troyano netbus para torpes...
  => MANUAL DE SQL SERVE
  => RESUMEN DEL HACKING NT
  => manual mirc scripting
  => introduccion a los routers cisco y sus seguridad
  => MANUAL Q EXPLICA QEU ES UN IP Y REDES Y ETC PARA PRINCIPIANTES
  => explicaciones del dns, y dns abuse
  => hacking ataques atraves de hadware
  => cmo hacer mi primer scripts en ares
  => instrucciones de para hacer un script en ares
  => COMO HACKEAR PC X NETBIOS lo mas buscado por el ares
  => aprender a hackear pagina web
  => tecnica y metodo de scaneo
  => bug del unicodex
  => biblia del hacker
  deja tu web aqui!
  descargas
  LOGIN
  foro de programadores y otras areas
Shell-Scripts en UNIX Un shell-Script es un fichero de texto que automatiza tareas al estilo de ficheros batch para DOS. Pueden crearse en cualquier editor de texto o bien con el comando cat. Su ejecución se realizará de la siguiente forma: sh nombre_script [argumentos], o bien, chmod ugo+x nombre_script, nombre_script.  Uso de variables en shell-script: Asignación: Nombre=valor Acceso a su contenido: $Nombre Podemos utilizar el comando read para leer variables desde teclado y el comando echo para visualizar su contenido (este comando también puede utilizarse para mostrar mensajes por pantalla). Ejemplo: Read nombre apellido1 apellido2 Echo Los valores leidos por teclado son: $nombre $apellido1 $apellido2  Variables especiales: $0: Nombre del Shell-Script que se está ejecutando. $n: Parámetro o argumento pasado al Shell-Script en la posición n, n=1,2,... $#: Número de argumentos. $*: Lista de todos los argumentos. $$: PID del proceso que se está ejecutando. $!: PID del último proceso ejecutado. $?: Salida del último proceso ejecutado. Bucles:  Estructura if if condicion1 then comandos si la condicion1 se cumple elif condicion2 then comandos si la condición2 se cumple else comandos si las condiciones 1 y 2 no se cumplen fi  Estructura for for variable in [lista de valores] do Comandos done  Estructura While while condicion do comandos done  Estructura Until until condicion do comandos done  Estructura Case case variable in patron1) comandos condicion1;; patron2) comandos condicion2;; ... patron n) comandos condicion n;; *) comandos si no se cumplen ninguna;; esac Especificación de condiciones:  Ficheros -f  true si fichero existe -r  true si fichero existe y con derecho de lectura -w  true si fichero existe y con derecho de escritura -x  true si fichero existe y con derecho de ejecución -s  true si fichero existe y no es vacío -d  true si directorio existe Ejemplo: if [ ! –f fichero ]  si el fichero no existe (importante respetar los espacios)  Cadenas -n  true si longitud cadena distinta 0 -z  true si longitud cadena es 0 =  true si son iguales !=  true si son distintas Ejemplo: if [ -n cadena1 ]  Si la longitud de la cadena es distinta de 0 Ejemplo: if [ cadena1 = cadena2 ]  Si las cadenas cadena1 y cadena2 son iguales  Enteros -eq  iguales -ne  distintos -gt  dato1 mayor que dato2 -ge  dato1 mayor o igual que dato2 -lt  dato1 menor que dato2 -le  dato1 mejor o igual que dato2 Ejemplo: if [ valor –eq 20 ]  si el valor numérico es un determinado escalar Ejemplo: if [ valor1 –gt valor2 ]  si el valor1 es mayor que el valor2  Otros comandos de utilidad: El comando exit se utiliza para salir de un Shell-Script de forma inmediata. Como opción, puede utilizar un número para indicar un estado de salida (la variable $? Contiene la condición de salida devuelta por un último comando). El comando break se utiliza para formar la salida de un bucle. break [n], donde n es el número de bucles de los que saldríamos en el caso de que hubiera varios anidados. El comando continue se utiliza para saltar iteraciones en un bucle. continue n, hace que se salten tantas iteraciones del bucle como especifique n. El comando Shift produce un desplazamiento no circular hacia la izquierda de los argumentos pasados al Shell-Script.  Expresiones numéricas: Las variables en el Shell son por defecto alfanuméricas. Para darles tratamiento numérico debemos recurrir al comando expr que evalúa expresiones aritméticas. Ejemplo: expr 3 + 4  7 Utilizando comillas simples inversas podemos asignar comandos a variables. Ejemplo: Cd n = `pwd` echo $n  /localhome/usuario De esta forma aplicando la sustitución de un comando por su resultado, se puede dar tratamiento numérico al contenido de una variable. Ejemplo: a= 3 a= `expr $a +2` echo $a  5 Redireccionamiento: (Estándar por teclado ) Entrada  Procesos  Salida (estándar por pantalla) Podemos redireccionar la entrada o salida a cualquier otro dispositivo. Ejemplo: ls –l > fichero  envía la salida a un fichero con la salida del comando ls. > salida < entrada  Comandos de tratamiento de texto y ficheros de texto Cat  crea, visualiza y concatena un fichero de texto cat > fichero  crea el fichero de texto. Para terminar con la entrada pulsar Ctrol+D cat fichero  visualiza el fichero cat fichero fichero > f2  concatena el fichero “fichero” y lo guarda en el fichero f2. El operador de redirección de salida es destructivo (>), si existiera f2 lo destruye sobrescribiendo la nueva información. Para no destruirlo se utilizaría el redireccionador (>>). cat < f1 > f2  coge la entrada de f1 y pone como salida f2, es decir, copia f1 en f2. ls –R /> listado  listado recursivo del sistema de ficheros (como un dir /s en DOS) y lo guarda en el fichero listado. more listado  edita ficheros largos, para bajar líneas pulsar Enter, para paginar, la barra espaciadora. Para salir pulsamos q o anulamos el proceso con Control + C. less listado  edita ficheros de texto pero se diferencia con more en que podemos utilizar todas las teclas de dirección. Para comparar ficheros utilizaremos cmp f1 f2  compara los dos ficheros, y nos dará como salida en el primer carácter que no son iguales los dos ficheros. También podemos comparar con el comando dic f1 f2  nos mostrará las líneas diferentes en los dos ficheros. Para comparar se suele utilizar el comando comm f1 f2  muestra tres columnas, la primera serán las líneas únicas del fichero f1, la segunda las líneas únicas del fichero f2 y la tercera columna, las líneas comunes de los dos ficheros. Para ordenar un fichero de texto se utiliza el comando sort fichero, sort –n lo mostrará en orden numérico y sort –r en orden inverso. Así por ejemplo sort fichero –n –r o sort fichero –nr ordena en forma inversa un fichero numérico. wc fichero  muestra número de líneas, número de palabras y número de caracteres. wc –l fichero  muestra nº de líneas wc –c fichero  muestra nº de palabras wc –w fichero  muestra nº de caracteres. head y tail  muestra las primeras o las últimas n líneas de un fichero head –5 fichero  muestra las 5 primeras líneas de fichero. taid –3 fichero  muestra las 3 últimas líneas de fichero. mkdir: crea directorio  mkdir uno mkdir –p uno/dos/tres  crea el árbol de directorios raiz-usuario-uno-dos-tres. ls –R uno  veremos el árbol de directorio de uno (igual que dir /s en DOS). rmdir : borra un directorio. Para poder borrar un directorio debe estar vacío. Para hacer un borrado recursivo usamos rm –r uno (borra el árbol que anteriormente creamos con mkdir –p uno/dos/tres). cp: copia ficheros  cp rutaorigen rutadestino  cp fich $HOME  copia al directorio de trabajo ($HOME) el fichero fich. mv: mover ficheros (misma sintaxis que cp). Si utilizamos mv fich fich2 renombraremos el fichero fich. rm: borra un fichero. rm –r borra un directorio y sus subdirectorios.  El editor de texto vi (no es práctico utilizar msedit y cat) Pipes o tuberías Son mecanismos que permiten comunicar procesos entre sí, es decir, la salida estándar de un proceso será la entrada del otro. Se utiliza el carácter | para concatenar los procesos. ls | more  visualiza el listado (ls) línea a línea. ls | sort | more  igual que el anterior pero el listado sería ordenado. cat nombres | sort > ordenado  visualiza el fichero nombres ordenado almacenándolo en el fichero “ordenado”. grep busca una cadena de caracteres en una serie de ficheros que especificamos como parámetros. Sus opciones serán: -c : cuenta las líneas en las que aparece la cadena. -l : muestra los nombres de los ficheros en los que aparece la cadena. -i : no diferencia entre mayúsculas y minúsculas. •  filtro de primer carácter. ^  principio de línea. $  final de línea. Ejemplo: mostrar el nombre de los ficheros en el directorio de trabajo en los que aparece alguna línea que comience por c. grep –l ^c. $home/* Donde ^c. Son las líneas que comienzan por c.Y $home/* es la ruta del directorio de trabajo ($home) y el * indica a todos los ficheros del directorio de trabajo. Ejemplo: contar el número de líneas en un fichero que entra como parámetro y que termina por c. grep –c .c$ fichero Donde –c indica a greg que cuente el número de líneas y .c$ las líneas que terminan por c. Find: busca a partir de un directorio que entra como parámetro, una serie de ficheros. - name “ “ : según el nombre y entre comillas un patrón de búsqueda. Criterios de búsqueda de FIND -size tamaño : busca ficheros con tamaño = a “tamaño” ej: -size +1024. -user id usuario: busca ficheros según el usuario. Ejemplo: buscar a partir del directorio raiz, aquellos ficheros que comienzan por una letra minúscula, el resultado guardarlo en un fichero llamado nombres. find / -name “[a-z]*” > nombres Donde / especifica el directorio raiz. –name realiza una búsqueda por nombre con find de el intervalo [a-z] (letras minúsculas) donde “[a-z]*” especifica a los ficheros que comienzan por minúscula y le sigue cualquier cosa. El operador > nombres, redireccionará la salida al fichero nombres. find /tmp –name “*.c” –size +1024 Busca en el directorio /tmp ficheros que el nombre y con tamaño mayor a 1024 bytes. Especificaciones de los Shell-Script Son ficheros tipo batch (proceso por lotes en DOS) en los que cada línea que lo compone, es una orden que se puede implementar en el prompt del sistema operativo. Los shell-script además pueden contener estructuras y declaraciones. Para ejecutarlos hay que darle todos los derechos al fichero con el comando chmod 777 nombrefichero. Para incluir un fichero en el PATH pondremos PATH = $PATH:$HOME  añade al path el directorio home. El comando read variable, lee desde teclado un valor y lo almacena en variable. Si ponemos read numero y tecleamos 12, almacenará el valor 12 en número. Lo podemos comprobar si después tenemos la orden echo $numero. Un ejemplo sencillo sería, un shell-script llamado ejemplo1 que admita un número indeterminado de parámetros y que muestre, el nombre del shell-script (es decir el nombre del fichero ejemplo1 $0), el número de parámetros que le hemos pasado y el nombre de esos parámetros: echo nombre shell-script: $0 echo número de parámetros: $# echo nombre de parámetros : $* expr evalúa aritméticamente las variables que le siguen expr 3 + 4 dará como salida 7. Ejemplos prácticos de programación de scripts:  Realizar un shell-script que lea dos números de teclado y muestre un mensaje indicando cual de ellos es mayor o bien si son iguales. echo Introduce numero1 read n1 echo Introduce numero2 read n2 if [ $n1 –gt $n2 ] then echo El numero $1 es mayor que $n2 elif [ $n2 –gt $n1 ] then echo El número $n2 es mayor que $n1 else echo Los números $n1 y $n2 son iguales fi  Realizar un shell-script que admita un único parámetro correspondiente a un fichero del directorio actual, si existe debe contar el número de líneas del mismo y mostrar un msg indicando dicho número, si no existe debe mostrar un msg de error y salir. if [ $# -ne 1 ] then echo Sintaxis $0 fichero echo Demasiados parámetros else if [ ! –f $1] then echo El fichero no existe exit else wc –l $1 > ficheraux read numlinea nombre < ficheraux echo el número de líneas es $numlinea fi fi  1ª parte: Realizar un programa que dado un directorio inicial y el nombre de un fichero, el programa debe buscar el fichero en cualquier subdirectorio que cuelgue del inicial. Los parámetros serán: 1. Directorio inicial, especificando mediante su ruta completa. 2. Nombre del fichero a buscar. Si se encuentra mostrar el fichero y su ruta. 2ª parte: Si el programa encuentra el fichero se mostrará además de la ruta de la siguiente información máscara de permisos, tamaño en bytes y fecha de la última modificación realizada sobre el fichero en formato mm/dd/hora if [ $# -ne 2 ] then echo error hay demasiados parámetros elif [ ! –d $1 ] then echo el directorio no existe exit fi fi lista = `ls $1` for i in lista do if [ -f $i ] then if [ $2 = $i ] then echo $1 / $i fi fi if [ -d $i ] then ejercicio $1 / $i $2  llamada recursiva al programa fi done  Realizar un Shell-Script que admita como único parámetro el nombre de un directorio, especificado mediante su nombre de ruta completo, si el directorio existe el programa debe mostrar el nombre de todos sus entradas, indicando para cada una de ellas si se trata de un fichero o un directorio. Si el directorio no existe se mostrará un mensaje de error. if [ $# -ne 1] then echo error, más de un parámetro else if [ ! –d $1 ] then echo el fichero no existe exit else for i in $1/*  do if [ -f $i ] then echo $i : fichero fi done fi fi  Realizar un shell-script que reciba como parámetro un número indeterminado de nombre de ficheros y como último parámetro un directorio especificado mediante su nombre de ruta completo. El programa debe mostrar un mensaje indicando cuantos de los ficheros especificados permanecen en dicho directorio. for i in $* do directorio=$i done if [ ! –d $directorio ] then echo error, el directorio no existe exit else for i in $* do if [ ! –d $i ] if [ -f $directorio /$i ] then count = $ ( cont + 1 ) fi fi done  Pseudo código del algoritmo Round-Robin con enfoque a Shell-Script T1 = $1 T2 = $2 Tactual = 0 While ... If (t1-quantum) >= 0 T1 = t1 – quantum Tactual= Tactual + quantum If (T1=0) then finproceso1 = Tactual Else Tactual=Tactual + t1 T1=0 Finproceso1=Tactual  Shell-Script del algoritmo SJF expulsor Implementar una simulación del algoritmo SJF expulsor para dos procesos. El Shell-Script se encarga de solicitar al usuario los tiempos de llegada y servicio de los dos procesos T.Llegada T.Servicio P1 0 4 P2 1 2 Pseudocódigo Leer tl1, ts1, tl2, ts2 Ciclo=0 P1=0 P2=0 Mientras (ts1 > 0) or (ts2 > 0) hacer If (tl1=ciclo) entonces P1=0 fi //si ts1 es igual a uno, el proceso está dentro. If (tl2=ciclo) entonces P2=0 fi If (ts1=0) and (p1=0) entonces P1=0 fi If (ts2=0) and (p2=0) entonces P2=0 fi If (p1=1) and (p2=1) entonces If (ts1 <= ts2) entonces Ts1=ts1-1 //p1; mostrar informacion está ejacutándose else ts2=ts2-1; mostrar información else If (p1=1) entonces ts1=ts1 –1 else ts2=ts2 –1 fi fi ciclo=ciclo + 1 finmientras Implementacion shell-script echo Introduce el tiempo de llegada de los procesos 1 y 2 read tl1 read tl2 echo Introduce el tiempo de servicio de los procesos 1 y 2 read ts1 read ts2 if [ $# -ne 4 ] then echo El número de parámetros es incorrecto exit fi ciclo = 0 p1=0 p2=0 while [ $ts1 –gt 0 ] || [$ts2 –gt 0 ] do if [ $tl1 –eq ciclo ] then $p1 = 1  fi if [ $tl2 –eq ciclo ] then $p2 = 1 fi if [$ts1 –eq 0 ] && [ $p1 –eq 1 ] then $p1=0 fi if [$ts2 –eq 0 ] && [ $p2 –eq 1 ] then $p2=0 fi if [ $p1 –eq 1 ] || [ $p2 –eq 1 ] then if [ $p1 – eq 1 ] && [ $p2 –eq 1 ] then if [ $ts1 –lt $ts2 ] then ts1 = $ (( ts1 – 1 )) else ts2 = $ (( ts2 – 1 )) fi else if [ $p1 –eq 1 ] then ts1 = $ (( ts1 –1 )) ciclopos = $ (( ciclo +1 ))  echo p1: $ciclo - $ciclopos else ts2 = $ (( ts2 –1 )) ciclopos = $ (( ciclo +1 )) echo p2: $ciclo - $ciclopos fi fi fi ciclo = $ (( ciclo + 1 )) done  Problema Escribir un shell-script que construya un menú con 4 opciones. El menú opera sobre un fichero llamado datos. Cada línea del fichero contiene dos cadenas: un nombre y un numero de teléfono. El fichero esta ordenado alfabéticamente por el nombre. Las opciones del menú son: 1. Búsqueda de un teléfono, dado el nombre 2. Alta, dado el nombre 3. Baja, dado el nombre 4. Listado por pantalla del fichero completo # Conviene crear el fichero vacio si no existe if [ ! -f datos ] then echo > datos fi while true do clear echo AGENDA TELEFONICA echo echo 1. Buscar entrada echo 2. Insertar entrada echo 3. Borrar entrada echo 4. Mostrar listado echo 5. Salir echo echo -n Opcion elegida: read opcion case $opcion in 1) clear echo BUSCAR ENTRADA echo echo -n Introduzca el nombre del usuario: read nombre if [ -z $nombre ] then break fi echo grep -i $nombre datos if [ $? -ne 0 ] then echo La entrada no existe echo fi echo echo Pulse INTRO para continuar... read intro;; 2) clear echo INSERTAR ENTRADA echo echo -n Introduzca el nombre del usuario: read nombre if [ -z $nombre ] then break fi echo echo -n Introduzca el telefono: read telefono if [ -z $telefono ] then break fi echo echo "$nombre $telefono" >> datos sort -d datos > temp mv temp datos;; 3) clear echo BORRAR ENTRADA echo echo -n Introduzca el nombre del usuario: read nombre if [ -z $nombre ] then break fi echo # Opcion 1 grep -v $nombre datos > temp mv temp datos;; # Opcion 2 # grep -d "^[<$nombre>]" datos > temp # mv temp datos;; 4) clear echo LISTAR ENTRADAS echo more datos echo echo Pulse INTRO para continuar... read intro;; 5) clear exit 0;; esac done  Problema 2 Escribir un Shell-Script que tome como parámetro el nombre de un directorio y realice las siguientes acciones: 1. Comprobar que el numero de parametros es correcto 2. Comprobar que el parametro es un directorio 3. Para cada entrada del directorio especificado el programa genera: El numero de la entrada Nombre de la entrada Tipo de la entrada: fichero, directorio, ... Tamaño Numero de enlaces Día y Mes de la última modificación # Comprobamos el numero de parametros if [ $# -ne 1 ] then echo Numero de parametros incorrecto echo echo Sintaxis: $0 directorio echo exit 0 fi # Comprobamos que el parametro es un directorio if [ ! -d $1 ] then echo El parametro especificado no es un directorio echo echo Sintaxis: $0 directorio echo exit 0 fi # Listado de los ficheros del directorio cont=0 for i in $1/* do echo Entrada numero: $cont ls -l $i cont=`expr $cont + 1` done  Problema 3 Realizar un shell-script en el que: 1. Si el primer parámetro es -l o -L, cree un enlace del fichero o directorio especificado en el segundo parámetro con el nombre especificado en el tercer parámetro. 2. Si el primer parámetro es -c o -C, contara y mostrara el numero de líneas, palabras y caracteres de todos los ficheros que se pasen por parámetro. 3. Si el primer parámetro es un nombre de fichero existente en el directorio actual, cambiar al directorio a cual nos vamos al hacer cd sin parámetros, crear en este un subdirectorio cuyo nombre se leerá por teclado, cambiar a este subdirectorio y copiar el fichero dado como primer parámetro con el nombre especificado en el segundo parámetro. # CASO 1 if [ $1 = "l" -o $1 = "L" ] then if [ $# -ne 3 ] then echo Sintaxis $0 -l|L fichero/directorio nombre echo exit else if [ -f $2 ] then ln $2 $3 else ln -s $2 $3 fi echo Enlace realizado con exito exit fi fi # CASO 2 if [ $1 = "c" -o $1 = "C" ] then if [ $# -lt 2 ] then echo Sintaxis $0 -c|C lista_ficheros echo exit else for i in $* do if [ -f $i ] then wc $i > temp read lineas palabras caracteres x < temp echo $i: $lineas lineas, $palabras palabras, $caracteres caracteres rm temp else echo Atencion: $i no es un fichero fi done exit fi fi # CASO 3 if [ $# -lt 2 ] then echo Sintaxis $0 fichero1 fichero2 echo exit else if [ -f $1 ] then actual=$PWD cd $HOME # Comprobacion del directorio while true do echo -n Introduzca el nombre del directorio: read directorio if [ -z $directorio ] then continue else break fi done # Si no existe el directorio lo creamos if [ -d $directorio ] then echo El directorio ya existe else mkdir $directorio fi cd $directorio cp $actual/$1 $2 echo Copia realizada con exito else echo El fichero especificado no existe echo exit fi fi  El usuario debe introducir 5 palabras separadas por espacios que serán ordenadas alfabéticamente en orden inverso y mostrará en pantalla únicamente la primera palabra resultado de la ordenación. clear echo "Introduzca 5 elementos (separados por espacios):" read uno dos tres cuatro cinco echo $uno > temp echo $dos >> temp echo $tres >> temp echo $cuatro >> temp echo $cinco >> temp sort -r temp > temp2 resultado=`head -1 temp2` rm temp rm temp2 echo El resultado es $resultado  Comprobar si el numero de ficheros existentes en el directorio actual es mayor que el número de usuarios conectados al sistema El shell-script debe responder: usuarios: si el numero de usuario es mayor ficheros: si el numero de ficheros es mayor clear who > usuarios wc -l usuarios > temp1 ls -l > ficheros wc -l ficheros >> temp1 sort -r temp1 > temp2 head -1 temp2 > temp1 read x resultado < temp1 rm temp1 rm temp2 rm usuarios rm ficheros echo Contiene mayor numero de lineas: $resultado  Debe crear dos directorio D1 y D2. Dentro de D2 debe crear un fichero 'hola' que contenga el nombre del usuario conectado. Después debemos movernos al directorio D1 y desde allí crear un enlace simbólico al fichero hola especificando su ruta completa. mkdir D1 mkdir D2 cd D2 logname > hola ruta=`pwd` cd ../D1 ln -s $ruta/hola  Realizar un shell-script que acepte como parámetros: 1. Una serie de nombres de archivo. 2. Como ultimo parámetro, el nombre de un archivo que no debe existir Se mostrara en pantalla los nombres de los archivos parámetro, todos excepto el último. En el fichero dado como último parámetro se escribirán los nombres de los ficheros parámetro que tengan un numero de bytes superior a 30. # CASO 1 if [ $1 = "l" -o $1 = "L" ] then if [ $# -ne 3 ] then echo Sintaxis $0 -l|L fichero/directorio nombre echo exit else if [ -f $2 ] then ln $2 $3 else ln -s $2 $3 fi echo Enlace realizado con exito exit fi fi # CASO 2 if [ $1 = "c" -o $1 = "C" ] then if [ $# -lt 2 ] then echo Sintaxis $0 -c|C lista_ficheros echo exit else for i in $* do if [ -f $i ] then wc $i > temp read lineas palabras caracteres x < temp echo $i: $lineas lineas, $palabras palabras, $caracteres caracteres rm temp else echo Atencion: $i no es un fichero fi done exit fi fi # CASO 3 if [ $# -lt 2 ] then echo Sintaxis $0 fichero1 fichero2 echo exit else if [ -f $1 ] then actual=$PWD cd $HOME # Comprobacion del directorio while true do echo -n Introduzca el nombre del directorio: read directorio if [ -z $directorio ] then continue else break fi done # Si no existe el directorio lo creamos if [ -d $directorio ] then echo El directorio ya existe else mkdir $directorio fi cd $directorio cp $actual/$1 $2 echo Copia realizada con exito else echo El fichero especificado no existe echo exit fi fi  Problema Shell-Script Realizar un shell-script que acepte como parámetros: 1. Una serie de nombres de archivo. 2. Como ultimo parámetro, el nombre de un archivo que no debe existir Se mostrara en pantalla los nombres de los archivos parámetro, todos excepto el ultimo. En el fichero dado como ultimo parámetro se escribirán los nombres de los ficheros parámetro que tengan un numero de bytes superior a 30. # Comprobación del número de parámetros if [ $# -lt 2 ] then echo Sintaxis: $0 fichero1 fichero2 ... ficheroN echo exit fi # Comprobar que el ultimo fichero no existe for i in $* do fichero=$i done if [ -f $fichero ] then echo Error: El ultimo fichero ya existe echo exit fi # Proceso de los ficheros introducidos por parametro contador=1 for i in $* do if [ $i = $fichero ] then break fi if [ -f $i ] then echo $i wc -c $i>temp read tamano x >$fichero fi else echo El fichero $i no existe echo exit fi done if [ -f temp ] then rm temp  Problema Shell-Script En un sistema de información disponemos de un fichero de texto de la forma: Primer_Apellido Segundo_Apellido Nombre La prueba consistirÁ en escribir un shell-script que tenga tres parámetros: 1. Directorio en el que se encuentra el fichero (D) 2. Nombre del fichero (F) 3. Numero de líneas (N) El shell-script debe realizar las siguientes acciones: 1. Comprobar la existencia del directorio (D). 2. Comprobar la existencia y derechos de lectura sobre el fichero (F)dentro del directorio indicado 3. Localizar el fichero (F) todas las lineas correspondientes a sujetos cuyo primer apellido sea Felipe 4. Crear un fichero (f1) ordenado alfabeticamente segun el segundo apellido, que contenga los N primeros nombres localizados # Comprobacion del numero de parametros if [ $# -ne 3 ] then echo Sintaxis: $0 directorio fichero numero_lineas echo exit fi # Comprobar que el directorio existe if [ ! -d $1 ] then echo Error: El directorio no existe echo exit fi # Comprobar que el fichero existe if [ ! -f $1/$2 ] then echo Error: El fichero no existe echo exit fi # Comprobar que el derecho de lectura del fichero if [ ! -r $1/$2 ] then echo Error: El fichero debe tener permiso de lectura echo exit fi grep "^Felipe" $1/$2 > $1/temp if [ $? -ne 0 ] then echo No se encontro el patron rm $1/temp exit else echo "Las entradas con el primer apellido "Felipe" son:" cat $1/temp echo fi sort +1 -2 $1/temp > $1/f1 echo "Los $3 primeros nombres del fichero ya ordenado son: " head -$3 $1/f1 rm $1/temp  Problema Shell-Script Realizar un shell-script que acepte como parámetros: 1. La extension de un nombre de archivo. 2. Ruta absoluta de un directorio Se mostrara en pantalla los nombres de los archivos parametro, todos excepto el ultimo. En el fichero dado como ultimo parametro se escribiran los nombres de los ficheros parametro que tengan un numero de bytes superior a 30. for i in $1/*.$2 do echo $i done  Realizar un shell-script que reciba como parámetro una extensión de archivo sin punto y el nombre de un directorio especificado mediante su nombre de ruta completo. El shell-script preguntará al usuario si desea copiar o mover los archivos del directorio actual que tengan esa extensión al directorio especificado como segundo parámetro. Una vez realizada la acción escogida se mostrará por pantalla un listado de los ficheros afectados, ordenados alfabéticamente. if [ $# -ne 2 ] then echo error, número de parámetros incorrecto exit fi if [ ! –d $2 ] then error directorio no existe exit fi echo Elija una opción: echo 1. Para copiar echo 2. Para mover read opcion while [ $opcion –ne 1 ] || [ $opcion –ne 2 ] do echo error, opción incorrecta echo vuelva a teclear opcion done if [ $opcion –eq 1 ] then cp *.$1 $2 //copia todos los archivos con extensión $1 a el directorio $2 fi if [ $opcion –eq 2 ] then mv *.$1 $2 //copia todos los archivos con extensión $1 a el directorio $2 fi ....otro caso podríamos haberlo implementado con la estructura case: . . . case $opcion in 1) cp *.$1 $2 //copia todos los archivos con extensión $1 a el directorio $2 2) mv *.$1 $2 //copia todos los archivos con extensión $1 a el directorio $2 esac Ejemplo de examen Shell-Script Revisar el código del shell-script, corregir los problemas de sintaxis y lograr su funcionamiento.  Algoritmo FIFO El shell-script recibe un fichero de texto que almacena una línea para cada proceso a planificar, cada línea tiene 3 campos separados por un espacio en los que se almacena respectivamente el tiempo de llegada, el tiempo de servicio y un identificador de proceso. Por ejemplo, el fichero podría ser: 0 5 P1 P1: 0 – 5 2 3 P2 P2: 5 - 11 1 6 P3 P3: 11 – 14 4 2 P4 P4: 14 – 16 el shell-script que deberíamos revisar sería: 1. read fichero 2. if [ NOT –f fichero ] then 3. echo El primer parámetro debe ser un fichero de texto 4. exit 5. else 6. wc –l fichero > lineas 7. sort –n fichero > copia 8. read tinicial tllegada id < copia 9. proceso = 1 10. while ($proceso –le $lineas) do 11. read llegada servicio id < copia 12. echo $id : $(( tinicial-tservicio )) - $tinicial 13. tinicial = $((tinicial+servicio)) 14. tail – ($lineas-$proceso) copia > aux 15. mv aux copia 16. proceso=proceso+1 17. done 18. rm copia 19. fi corrección if [ $# -ne 1 ] then echo sintaxis correcta: nombre_shell_script fichero exit else if [ ! –f $1 ] #comprobación de la existencia del fichero introducido como parámetro then wc –l fichero > temp. read lineas nombre < temp. rm temp.  sort –n $1 > copia read tinicial tllegada id < copia proceso = 1 while [proceso –le $lineas] do read llegada servicio id < copia echo $id : $tinicial - $((tinicial + tservicio)) tinicial = $((tinicial+servicio)) tail -$((lineas - proceso) copia > aux mv aux copia proceso = $((proceso + 1)) done rm copia fi fi
 
Hoy habia 9 visitantes¡Aqui en esta página!
aqui encontraras de todo Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis