P. 1
bucles

bucles

|Views: 19|Likes:
Publicado porFelipe Bonilla

More info:

Published by: Felipe Bonilla on May 24, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/09/2014

pdf

text

original

Bucles ”while”, ”for” y ”until”.

Por Jorge Fuertes http://jorgefuertes.com c 2009 Jorge Fuertes Alfranca Revisado a 15 de mayo de 2009

1

´ Indice
1. Introducci´n o 1.1. Los bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Bucles while 2.1. Construcci´n t´ o ıpica . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Bucle infinito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Bucles for 3.1. Construcci´n t´ o ıpica . . . . . . . . . . . . . . 3.1.1. For sobre una secuencia de n´meros u 3.1.2. For sobre las l´ ıneas de un fichero . . 3.2. Bucle for sobre la consola o shell . . . . . . 4. Los bucles until 5. Ejercicios 5.1. Enunciados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. Sobre esta unidad did´ctica a 6.1. Notas y advertencias . . . 6.2. Derechos . . . . . . . . . . 6.3. Agradecimientos . . . . . 6.4. Revisiones . . . . . . . . . 3 3 3 3 4 5 6 6 6 7 8 8 8 12 21 21 21 21 21

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

2

o 6 Cada ejecuci´n del bucle o rutina. Bucles while Una estructura while se ejecutar´ mientras se cumpla una determinada a condici´n de carrera. a Estas son: while: Ejecutar´ la rutina mientras se cumpla una determinada cona dici´n de carrera. o 5 Programaci´n de guiones de Bash. o for: Ejecutar´ la rutina a lo largo de toda una secuencia o entrada. 1. y podr´ ıa ıamos forzar la salida en alg´n momento con una instrucci´n exit o break. Construcci´n t´ o ıpica Una construcci´n t´ o ıpica de while es: #!/bin/bash CONTADOR=1 while [ $CONTADOR -lt 10 ] do echo "El contador vale ${CONTADOR} y es menor que 10. lo que producir´ la salida del bucle. Es decir. que la condici´n especificada debe ser verdadera o o para que el contenido del bucle pueda ejecutarse. u o 2. ıa Tambi´n podr´ construirse un while infinito. Supuestamente algo en dicho contenido producir´ variaciones en la condici´n de carrera hasta provocar que a o esta sea falsa. en base a una condici´n de carrera 2 o bien o hasta el final de una secuencia3 o de un flujo de entrada de datos4 . o 3 Por ejemplo de 1 a 10 o de la ”a” a la ”z”. que siempre ser´ verdadera. until: Ejecutar´ la rutina hasta que se cumpla una determinada cona dici´n de carrera. 4 Por ejemplo un fichero. En el bash scripting 5 . a siendo cada elemento de esta secuencia parte de la iteraci´n 6 a trav´s de o e una variable. Introducci´n o Los bucles Los bucles o loops en ingl´s. Estas construcciones nos permiten ejecutar o la misma rutina 1 repetidamente. hay tres estructuras que nos permitir´n realizar bucles." let CONTADOR++ done 1 Bloque de c´digo que se ejecutar´ en diversas ocasiones y/o que puede ser llamado desde o a otras partes del programa. quiz´ el resultado de un cat. 2 Condici´n que de cumplirse marca el fin de un bucle. o 2.1. son una parte fundamental del control de flujo en e cualquier lenguaje de programaci´n.1. o 3 . por ejemplo con condici´n de e ıa o carrera [ 1 ]. siendo cada l´ a ınea del fichero objeto de una iteraci´n del bucle.1.

usuario. o 2. Bucle infinito En programaci´n un bucle infinito se entiende como un error. 10. 10.2. Como se puede observar el bucle ha sido ejecutado 9 veces. con lo que incumple la condici´n de carrera. Por ejemplo: o #!/bin/bash # La condici´n [ 1 ] es siempre verdadera. o while [ 1 ] do echo "¿Hay alguien ah´?" ı read ENTRADA if [ "$ENTRADA" == "si" ] then echo "Hola." Este programa estar´ todo el rato preguntando al usuario que si hay alguien a ah´ S´lo se detendr´ al contestar ”no”. 10. 10. 10. si hay un bucle o infinito en un programa est´ se quedar´ colgado en dicho bucle y no continuar´ e a a nunca. as´ que el buo ı cle comienza a ejecutare. Como $CONTADOR es igual a 1." elif [ "$ENTRADA" == "no" ] then echo "Pues si no hay nadie me voy. o a a 4 . 10." fi done echo "Fin de programa. Sin embargo podemos aprovecharnos los bucles pseudoinfinitos para conseguir que un programa est´ continuamente funcionando hasta que forcemos la e salida con una instrucci´n break.Este programa producir´ la siguiente salida: a El El El El El El El El El contador contador contador contador contador contador contador contador contador vale vale vale vale vale vale vale vale vale 1 2 3 4 5 6 7 8 9 y y y y y y y y y es es es es es es es es es menor menor menor menor menor menor menor menor menor que que que que que que que que que 10. cumple la condici´n de ser menor de 10. 10. Lo primero que hacemos es un echo diciendo cuando vale el contador a la entrada del bucle y acto seguido lo incrementamos (let CONTADOR++) y este proceso se repite hasta que contador ha sido incrementado hasta 10." break else echo "No entiendo. respuesta que causar´ la salida del bucle ı. 10.

ıa Recuerde: Utilize break para salir de un bucle ignorando la condici´n de o carrera. a La estructura de un bucle for. Observe que la l´ o ınea final echo "Fin de programa. haga la prueba en el terminal: #> seq 1 10 1 2 3 4 5 6 7 8 9 10 5 . en pseudoc´digo. pr´cticamente a o a s´lo cambia en que hemos introducido el comando seq para generar una secueno cia de 1 a 20.. o Son utiles para recorrer secuencias de n´meros. la salida hubiese e o sido total. Bucles for Los bucles de tipo for recorren una secuencia de principio a fin. Si desea ver que hace. expresiones matem´ticas." ser´ ejecutada normalmente. Si a o por el contrario hubi´semos utilizado una instrucci´n ”exit”. etc. e introducen en una variable el valor de la actual iteraci´n." O en c´digo real de Bash: o #!/bin/bash for VAR in $(seq 1 20) do echo "Estoy en la iteraci´n n´mero $VAR" o u done echo "Programa finalizado. y esta ultima l´ ´ ınea nunca llegar´ a ejecutarse. ya que s´lo hemos ordenado la salida del bucle." Como se ver´ el programa real es muy parecido al de pseudoc´digo. l´ ´ u ıneas de un fichero de texto. de todo el programa. 3.mediante la instrucci´n break. si no se sale con un break.. ser´ o ıa: para VAR de 1 a 20 hacer decir "Estoy en la iteraci´n n´mero VAR" o u hecho decir "Programa finalizado.

3. n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u n´mero u 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 For sobre las l´ ıneas de un fichero #!/bin/bash echo "Nombres y edades:" echo "-----------------" 6 .1. la que recorre una secuencia de n´meros y la que recorre las l´ u ıneas de un fichero." Lo que har´ bash al ejecutar ese programa es. 3. En el caso de este programa el contenido entre estas l´ ıneas ser´ ejecutado veinte veces.1. sin escribir un script.2.1.1. por cada uno de los n´meros a u de la secuencia. For sobre una secuencia de n´ meros u #!/bin/bash for VAR in $(seq 1 20) do echo "Estoy en la iteraci´n n´mero $VAR" o u done echo "Programa finalizado. Construcci´n t´ o ıpica Vamos a ver tres construcciones muy t´ ıpicas. introducirlo en la variable VAR y ejecutar lo que hay entre las l´ ıneas do y done. El resultado por pantalla ser´: a a Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Estoy en Programa 3. la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o la iteraci´n o finalizado. y adicionalmente veremos como ejecutar un bucle for en la consola.

n Paula tiene 34 a~os. por ejemplo: 7 .txt) do NOMBRE=$(echo $LINEA|cut -f1 -d":") EDAD=$(echo $LINEA|cut -f2 -d":") echo "$NOMBRE tiene $EDAD a~os. n Elena tiene 60 a~os. 3. n Pablo tiene 32 a~os. Bucle for sobre la consola o shell En muchas ocasiones necesitaremos ejecutar un bucle en la consola. ı n Federico tiene 50 a~os." n done echo echo "Programa finalizado. en este caso ”:” y darnos el campo que solicitamos en las opciones. o Para eso podemos teclearlo en la l´ ınea de comandos. es decir el a nombre. Dentro del bucle se ejecutan dos comandos cut para obtener por separado el nombre y la edad." Siendo el fichero ”nombres-edades. un bucle que s´lo vamos a utilizar una vez y para el que o no hay necesidad de crear un gui´n. n Programa finalizado. pasando a ejecutar el bucle.) en lugar de por intros. separando las l´ ıneas por punto y coma (.2. si es -f1 nos dar´ el primer campo. n Sonia tiene 33 a~os. Al ejecutar obtendremos lo siguiente por pantalla: #> sh edades.sh Nombres y edades: ----------------Pepe tiene 23 a~os. n Juan tiene 27 a~os. Lo que hace cut es cortar la l´ ınea por el seaparador. n Mar´a tiene 54 a~os.for LINEA in $(cat nombres-edades. mientras estamos trabajando.txt” algo como esto: Pepe:23 Paula:34 Juan:27 Mar´a:54 ı Federico:50 Pablo:32 Sonia:33 Elena:60 El programa recorrer´ cada una de las l´ a ıneas del fichero y la pondr´ en la a variable LINEA.

10.#> for i in $(seq 1 10). ı 4. 10. para no confundir.1. Es decir que son exaco tamente iguales pero al rev´s. y para que deje de ejecutarse debe pasar a ser verdadera.". la condici´n de e o carrera debe ser falsa.sh El El El El El El El El El contador contador contador contador contador contador contador contador contador vale vale vale vale vale vale vale vale vale 1 2 3 4 5 6 7 8 9 y y y y y y y y y es es es es es es es es es menor menor menor menor menor menor menor menor menor que que que que que que que que que 10. 10. El ejemplo es muy sencillo. Ejercicios Enunciados Cree un script o gui´n de Bash para cada uno de los ejercicios. 10. do echo "Iteraci´n n´mero $i". 10. Para que un bucle until se ejecute. 5. 10. pero habr´ ıa que teclearlo en una sola. Los bucles until Los bucles until son los ant´nimos de los bucles while. 5.sh. 10. o u echo "Podr´amos ejecutar cualquier cosa aqu´." let CONTADOR++ done El bucle anterior se ejecutar´ hasta que la variable CONTADOR pase a valer a 10: #> sh prueba-until. y ll´melo o a ej-bucles-num. done ı ı Note que por problemas de espacio el bucle aparece en dos l´ ıneas. siendo num el n´mero de ejercicio: u 8 . Por ejemplo: #!/bin/bash CONTADOR=1 until [ $CONTADOR -eq 10 ] do echo "El contador vale ${CONTADOR} y es menor que 10. pero cualquier bucle podr´ ser ıa ejecutado de esta forma. Por ejemplo uno que recorra un fichero y cree cuentas de usuario con los nombres all´ contenidos. 10.

u 2. Escriba un gui´n que admita palabras (seguidas de enter ) por parte del o usuario hasta que este teclee ”salir ”. Por ejemplo una l´ n ınea ser´ ”Juan.”.. Consiga que si el usuario introduce un n´mero en lugar de una palabra. Despu´s calcule la media aritm´tica7 entre todos e e ellos. Modifique el programa anterior de forma que las palabras se vayan guardando en un fichero ”palabras. Por ejemplo si introduce ”5”. por ejemplo para la anterior dir´ ”Juan ıa tiene 24 a˜os.1. se le devuelva la palabra que introdujo u en esa posici´n. separadas por una coma. n 7 http://es. es decir: 1 + 2 + 3 + 4 + 5. 6. u 4.” para cada una de las l´ n ıneas. una edad expresada en a˜os. Guarde ese fichero como ”nombre-edad. Medio: Cree un script que pida n´meros al usuario hasta que este teclee u la palabra ”promedio”.org/wiki/Media_aritm%C3%A9tica 9 .wikipedia. Cree un fichero que contenga una lista de cinco nombres de pila y. se le devolver´ la palabra o a n´mero cinco del fichero ”palabras. 3..txt”. 5. despu´s debe aparecer en pantalla el e n´mero de palabras que se han introducido y una despedida.txt”.txt” y escriıa ba un gui´n que lo recorra y diga por pantalla ”Tal nombre tiene tantos o a˜os. Escriba un programa que calcule el resultado de sumar todos los n´meros u del 1 al 100 secuencialmente.24”. Modifique de nuevo el programa.

el grupo debe ser ”ejercicios”. Cree un script que borre todos los usuarios pertenecientes al grupo ”ejercicios” pero antes de borrar a cada uno debe mostrar su nombre por pantalla y pedir confirmaci´n. Escribe un programa que dado un nombre de paquete de Debian. si el usuario no existe debe dar la opci´n de comprimir en un o backup y borrar el directorio de ese usuario fantasma. Con la misma lista. y que compruebe que la primera l´ ınea de cada uno de ellos es ”#!/bin/bash”. Haga un gui´n que mire todos los directorios que haya dentro de /hoo me y que por cada uno de ellos compruebe si existe dicho usuario en el /etc/passwd. y si no lo est´ de la opci´n de obtener m´s a a o a informaci´n sobre ´l o de instalarlo.gz (uno s´lo) de todos los directorios de usuario de la m´quina o a (excluyendo a root) con el nombre homes-backup. Utilizando el fichero del ejercicio anterior haga un gui´n que diga qui´n o e de la lista es el mayor y el menor. compruebe si est´ instalado o no. Antes de probarlo cree varios directorios dentro de /home.7. haga un gui´n que cree un usuario para cada uno de o ellos en su m´quina. 12. Escriba un gui´n que repase todos los ficheros de ejercicios que ha hecho o hasta ahora. 9. o 10. o e 10 . y que haga despu´s a e un tar.tgz y que se guarde en /root/backups. 8. 11.

13. 11 . utilice un bucle until para ello. Construya un programa que escriba por pantalla una secuencia de 1 a 99.

Soluciones 1. Escriba un gui´n que admita palabras (seguidas de enter ) por parte del o usuario hasta que este teclee ”salir ”." 2.2.5. Modifique el programa anterior de forma que las palabras se vayan guardando en un fichero ”palabras. u #!/bin/bash # Variables: CONTADOR=0 PALABRA="" # Limpiar pantalla: clear # Bucle: while [ "$PALABRA" != "salir" ] do # Entrada de usuario: read -p "Introduzca palabra: " PALABRA let CONTADOR++ done # Quitamos 1 por "salir": let CONTADOR-# Total de palabras: echo "Has tecleado $CONTADOR palabras. #!/bin/bash clear # Variables: CONTADOR=0 # Creamos o borramos el fichero auxiliar: cat /dev/null > palabras.txt while [ 1 ] do # Entrada de usuario: read -p "Introduce palabra: " PALABRA # Convertir a min´sculas: u 12 . despu´s debe aparecer en pantalla el e n´mero de palabras que se han introducido y una despedida.txt”.

Modifique de nuevo el programa. se le devuelva la palabra que introdujo u en esa posici´n." 3.txt”. Consiga que si el usuario introduce un n´mero en lugar de una palabra. u #!/bin/bash # Limpiar pantalla: clear # VariableS: DATO="" CON=0 # Instrucciones: echo "Introduzca las palabras que quiera.PALABRA=$(echo $PALABRA|tr "A-Z" "a-z") # Salir del bucle si PALABRA es "salir": if [ "$PALABRA" == "salir" ] || [ -z "$PALABRA" ] then break else # Sumamos 1 palabra: let CONTADOR++ # Agregar palabra al fichero: echo $PALABRA >> palabras. que las memorizar´." # Borrar fichero auxiliar: cat /dev/null > palabras.txt # Bucle: while [ "$DATO" != "salir" ] do read -p "¿Palabra a guardar? " DATO # Comprobar. mediante exp.regular si es un n´mero: u if [[ $DATO =~ [0-9] ]] then # Comprobar que la palabra solicitada es de # que ya han sido memorizadas: if [ $DATO -gt $CON ] then 13 ." e echo "Pulsa (’salir’) para terminar. se le devolver´ la palabra o a n´mero cinco del fichero ”palabras.txt fi done echo "Has introducido $CONTADOR palabras. Por ejemplo si introduce ”5”.

\nAdi´s.org/wiki/Media_aritm%C3%A9tica 14 .wikipedia.txt fi fi done echo -e "\nTecleaste $CON palabras. Escriba un programa que calcule el resultado de sumar todos los n´meros u del 1 al 100 secuencialmente." # Sumar VAR a lo anterior: RES=$(expr $RES + $VAR) done # Resultado: echo " El resultado es $RES. #!/bin/bash clear # Variables: CONTADOR=0 8 http://es.\n" else cat palabras.." 5.txt|grep -E "^${DATO}"|cut -f2 -d":" fi else if [ "$DATO" != "salir" ] then # Cuento una palabra m´s: a let CON++ # Guardo la palabra con su n´mero correspondiente: u echo "$CON:$DATO" >> palabras. #!/bin/bash # VariableS: RES=0 # Bucle: for VAR in $(seq 1 100) do echo "Sumando $RES + $VAR.echo -e "\nERROR: No has introducido tantas palabras.\n" o 4. es decir: 1 + 2 + 3 + 4 + 5. Despu´s calcule la media aritm´tica8 entre todos e e ellos.. Medio: Cree un script que pida n´meros al usuario hasta que este teclee u la palabra ”promedio”.

" PROMEDIO=$(echo "scale=2. #!/bin/bash clear 15 .24”.txt|tr " " "_") do NOMBRE=$(echo $LINEA|cut -f1 -d".") echo "El promedio es $SUMA entre $CONTADOR igual a ${PROMEDIO}.”.SUMA=0 while [ 1 ] do # Entrada de usuario: read -p "Diga un n´mero: " NUMERO u # Comprobar si nos piden el promedio: if [ "$NUMERO" = "promedio" ] || [ "$NUMERO" = "PROMEDIO" ] then # Romper bucle: break fi let CONTADOR++ SUMA=$(expr $SUMA + $NUMERO) done echo "Ha introducido $CONTADOR numeros. Guarde ese fichero como ”nombre-edad. Por ejemplo una l´ n ınea ser´ ”Juan. por ejemplo para la anterior dir´ ”Juan ıa tiene 24 a˜os.") echo "$(echo $NOMBRE|tr "_" " ") tiene $EDAD a~os." 6." "." n done 7.” para cada una de las l´ n ıneas. $SUMA / $CONTADOR"|bc|tr ". n #!/bin/bash clear for LINEA in $(cat nombre-edad.") EDAD=$(echo $LINEA|cut -f2 -d". una edad expresada en a˜os.txt” y escriıa ba un gui´n que lo recorra y diga por pantalla ”Tal nombre tiene tantos o a˜os. Cree un fichero que contenga una lista de cinco nombres de pila y. Utilizando el fichero del ejercicio anterior haga un gui´n que diga qui´n o e de la lista es el mayor y el menor. separadas por una coma.

gz (uno s´lo) de todos los directorios de usuario de la m´quina o a (excluyendo a root) con el nombre homes-backup. #!/bin/bash clear # Comprobar si exsiste el grupo: cat /etc/group|grep "ejercicios" &> /dev/null if [ $? -ne 0 ] then echo "A~adiendo grupo ejercicios." n echo 8." n echo "El mayor es $(echo $NOMBREMAYOR|tr "_" " ") con $EDADMAYOR a~os." n if [ $EDAD -lt $EDADMENOR ] then EDADMENOR=$EDAD NOMBREMENOR=$NOMBRE fi if [ $EDAD -gt $EDADMAYOR ] then EDADMAYOR=$EDAD NOMBREMAYOR=$NOMBRE fi done echo echo "El menor es $(echo $NOMBREMENOR|tr "_" " ") con $EDADMENOR a~os." n addgroup ejercicios fi 16 . y que haga despu´s a e un tar.# Variables: EDADMENOR=999 EDADMAYOR=0 NOMBREMENOR="" NOMBREMAYOR="" # Bucle: for LINEA in $(cat nombre-edad. haga un gui´n que cree un usuario para cada uno de o ellos en su m´quina. Con la misma lista.tgz y que se guarde en /root/backups. el grupo debe ser ”ejercicios”.") echo "$(echo $NOMBRE|tr "_" " ") tiene $EDAD a~os.") EDAD=$(echo $LINEA|cut -f2 -d".txt|tr " " "_") do NOMBRE=$(echo $LINEA|cut -f1 -d".

\n\n" o echo -n "Creando copia de seguridad de /home..tgz /home if [ $? -eq 0 ] then echo "OK" else echo "ERROR" exit 1 fi 9.." else echo "ERROR creando usuario. o #! /bin/bash clear # Bucle: for linea in $(cat /etc/passwd|tr " " "_") do # Si el usuario tiene UID < 1000 es de sistema # y hay que saltarlo." useradd -g ejercicios -m $NOMBRE if [ $? -eq 0 ] then echo "Creado correctamente.txt|tr " " "-"|tr "A-Z" "a-z") do NOMBRE=$(echo $i|cut -f1 -d".# Crear directorio de backups: mkdir -p /root/backups # Bucle: for i in $(cat nombre-edad.") echo "Creando usuario $NOMBRE.. Cree un script que borre todos los usuarios pertenecientes al grupo ”ejercicios” pero antes de borrar a cada uno debe mostrar su nombre por pantalla y pedir confirmaci´n. USUUID=$(echo $linea|cut -f3 -d":") if [ $USUUID -lt 1000 ] then echo "$USUUID es un usuario de sistema." # exit 1 fi done echo -e "FIN de creaci´n de usuarios.." tar czf /root/backups/homes-backup." 17 .

." cat /etc/passwd | grep $DIR &> /dev/null if [ $? -eq 0 ] then # El usuario existe. #!/bin/bash clear for DIR in $(ls -C1 /home) do echo "Comprobando directorio $DIR. echo "El usuario $DIR no existe." userdel -r $usuario if [ $? -eq 0 ] then echo "OK" else echo "ERROR" fi fi fi fi done 10. si el usuario no existe debe dar la opci´n de comprimir en un o backup y borrar el directorio de ese usuario fantasma.else usuario=$(echo $linea|cut -f1 -d":") # Sacar grupos del usuario y ver si tiene ’ejercicios’: groups $usuario|grep "ejercicios" &> /dev/null if [ $? -eq 0 ] then read -n 1 -p "¿Borrar al usuario ${usuario}? (Y/N): " YN echo if [[ "$YN" == "y" || "$YN" == "Y" ]] then echo -n "Borrando usuario $usuario." read -p "¿Comprimimos el directorio y lo eliminamos? (s/n): " \ -n1 SN echo 18 . Antes de probarlo cree varios directorios dentro de /home." else # El usuario no existe... Haga un gui´n que mire todos los directorios que haya dentro de /hoo me y que por cada uno de ellos compruebe si existe dicho usuario en el /etc/passwd.. echo "El usuario existe.

." fi fi done 11.tgz /home/$DIR echo "Borrando /home/$DIR." tar czf /root/backups/$DIR.. #!/bin/bash clear echo "Comprobando forma 1." rm -Rf /home/$DIR echo "El directorio $DIR ha sido comprimido y eliminado. y que compruebe que la primera l´ ınea de cada uno de ellos es ”#!/bin/bash”. # comprimiendo un backup previamente." ı fi done 12. y si no lo est´ de la opci´n de obtener m´s a a o a informaci´n sobre ´l o de instalarlo." echo for nombre in $(ls ej-bucles*) do linea=$(cat $nombre|head -n 1) if [ "$linea" != "#!/bin/bash" ] then echo El archivo $nombre no tiene la primera l´nea correcta. echo "Comprimiendo backup de $DIR. o e 19 . Escriba un gui´n que repase todos los ficheros de ejercicios que ha hecho o hasta ahora. compruebe si est´ instalado o no... ı fi done echo -e "\nComprobando forma 2:\n" for nombre in $(ls ej-bucles*) do head -n1 $nombre|grep "\#\!/bin/bash" &> /dev/null if [ $? -ne 0 ] then echo "La primera l´nea de $nombre es incorrecta. Escribe un programa que dado un nombre de paquete de Debian.if [[ "$SN" == "s" || "$SN" == "S" ]] then # Por tanto hay que borrar el directorio fantasma.

#! /bin/bash clear read -p "Introduzca el nombre del paquete: " nombre aptitude search $nombre|grep -E "^i.\n" 20 . #!/bin/bash clear contador=1 until [ $contador -eq 100 ] do echo -n "${contador} " let contador++ done echo -e "\nFin de programa. utilice un bucle until para ello. Construya un programa que escriba por pantalla una secuencia de 1 a 99.*$nombre\ " &> /dev/null if [ $? -ne 0 ] then echo el paquete $nombre no est´ instalado a read -n1 -p "Quiere m´s informaci´n del paquete (P) o desea instalarlo (I): " opci a o echo if [ "$opcion" == "P" ] then echo informaci´n sobre el paquete $nombre o aptitude show $nombre else echo instalando el paquete $nombre aptitude install $nombre fi else echo el paquete $nombre est´ instalado a fi 13.

. S´lo puede ser utilizada previa ıa o aceptaci´n del contrato de cesi´n sito en: o o http://www. asociaciones. Tambi´n quiero agradecer muy especialmente su ayuda a mis alumnos y e lectores. cursos@jorgefuertes.6. o a 6. La informaci´n quiere o o ser libre..3.2.com.coloriuris. manuales y experiencias en Internet. ya que otras ıa distros no basadas en Debian podr´ incorporar sistemas diferentes para el ıan manejo de sus paquetes. Derechos Esta gu´ se cede bajo contrato Coloriuris. podr´ ıa a ıa haber peque˜os cambios si se aplica a otras distribuciones de GNU. as´ como a todo aqu´l o ı e que publica art´ ıculos. Revisiones El autor ir´ eventualmente publicando revisiones de esta unidad en su p´gina a a personal.net/contratos/ef5af6aaa441ab9c213273fade56dca1 Dicho contrato garantiza que estoy cediendo los derechos de uso y modificaci´n sin ´nimo de lucro. adaptaciones. Un agradecimiento muy especial a toda la comunidad del Software Libre. traductores. 6.com. pero en n su mayor parte funcionar´ bien con la excepci´n de lo referido al sistema de a o paqueter´ de programas. y estar´ encantado de recibir sugerencias y dudas en la misma o en su a email: http://jorgefuertes. ya que eso favorece a la difusi´n del conocimiento y al desarrollo humano.1. ıa hacktivistas.. Por supuesto se puede contactar con el autor para contratarle para hacer nuevas unidades. 6. cursos. por tomarse la molestia de comunicarme las erratas y por darme ideas para mejorar los ejercicios. etc. Agradecimientos El autor quiere reflejar su agradecimiento a todas las p´ginas de Internet a que ponen a disposici´n de todo el mundo sus contenidos. webmasters.. modificaciones. Sin ellos el autor vivir´ en la oscuridad: Programadores. Sobre esta unidad did´ctica a Notas y advertencias Debian: Esta gu´ est´ basada en el sistema Debian GNU/Linux. los comandos que empiezan por apt.4. 21 . 6. etc.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->