bucles

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

a Estas son: while: Ejecutar´ la rutina mientras se cumpla una determinada cona dici´n de carrera. until: Ejecutar´ la rutina hasta que se cumpla una determinada cona dici´n de carrera.1. ıa Tambi´n podr´ construirse un while infinito. 1. o 2. o 5 Programaci´n de guiones de Bash. Introducci´n o Los bucles Los bucles o loops en ingl´s. o 3 . o for: Ejecutar´ la rutina a lo largo de toda una secuencia o entrada. siendo cada l´ a ınea del fichero objeto de una iteraci´n del bucle. o 3 Por ejemplo de 1 a 10 o de la ”a” a la ”z”. Bucles while Una estructura while se ejecutar´ mientras se cumpla una determinada a condici´n de carrera.1. 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." 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. u o 2. quiz´ el resultado de un cat. lo que producir´ la salida del bucle. a siendo cada elemento de esta secuencia parte de la iteraci´n 6 a trav´s de o e una variable. En el bash scripting 5 . Es decir. que la condici´n especificada debe ser verdadera o o para que el contenido del bucle pueda ejecutarse. 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 . 4 Por ejemplo un fichero. hay tres estructuras que nos permitir´n realizar bucles. y podr´ ıa ıamos forzar la salida en alg´n momento con una instrucci´n exit o break. que siempre ser´ verdadera. Estas construcciones nos permiten ejecutar o la misma rutina 1 repetidamente. por ejemplo con condici´n de e ıa o carrera [ 1 ]. 2 Condici´n que de cumplirse marca el fin de un bucle. Supuestamente algo en dicho contenido producir´ variaciones en la condici´n de carrera hasta provocar que a o esta sea falsa. o 6 Cada ejecuci´n del bucle o rutina. son una parte fundamental del control de flujo en e cualquier lenguaje de programaci´n.1.

10. usuario. 10. cumple la condici´n de ser menor de 10. si hay un bucle o infinito en un programa est´ se quedar´ colgado en dicho bucle y no continuar´ e a a nunca.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. 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. 10. o while [ 1 ] do echo "¿Hay alguien ah´?" ı read ENTRADA if [ "$ENTRADA" == "si" ] then echo "Hola. as´ que el buo ı cle comienza a ejecutare. con lo que incumple la condici´n de carrera. 10.2. Por ejemplo: o #!/bin/bash # La condici´n [ 1 ] es siempre verdadera. o a a 4 . Bucle infinito En programaci´n un bucle infinito se entiende como un error. 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. Como se puede observar el bucle ha sido ejecutado 9 veces. o 2." break else echo "No entiendo. respuesta que causar´ la salida del bucle ı. 10. 10. 10. Como $CONTADOR es igual a 1. 10." elif [ "$ENTRADA" == "no" ] then echo "Pues si no hay nadie me voy." fi done echo "Fin de programa." Este programa estar´ todo el rato preguntando al usuario que si hay alguien a ah´ S´lo se detendr´ al contestar ”no”.

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

introducirlo en la variable VAR y ejecutar lo que hay entre las l´ ıneas do y done. 3. 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. 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." Lo que har´ bash al ejecutar ese programa es. 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 . por cada uno de los n´meros a u de la secuencia. y adicionalmente veremos como ejecutar un bucle for en la consola.1. 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. la que recorre una secuencia de n´meros y la que recorre las l´ u ıneas de un fichero.1.1. Construcci´n t´ o ıpica Vamos a ver tres construcciones muy t´ ıpicas.2.1. sin escribir un script.3. En el caso de este programa el contenido entre estas l´ ıneas ser´ ejecutado veinte veces.

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

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

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

y que compruebe que la primera l´ ınea de cada uno de ellos es ”#!/bin/bash”. si el usuario no existe debe dar la opci´n de comprimir en un o backup y borrar el directorio de ese usuario fantasma. 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. Con la misma lista. Escriba un gui´n que repase todos los ficheros de ejercicios que ha hecho o hasta ahora. el grupo debe ser ”ejercicios”. haga un gui´n que cree un usuario para cada uno de o ellos en su m´quina. Escribe un programa que dado un nombre de paquete de Debian. 9. y que haga despu´s a e un tar.7. y si no lo est´ de la opci´n de obtener m´s a a o a informaci´n sobre ´l o de instalarlo. 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.tgz y que se guarde en /root/backups. 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. compruebe si est´ instalado o no. 8. 12. Antes de probarlo cree varios directorios dentro de /home.gz (uno s´lo) de todos los directorios de usuario de la m´quina o a (excluyendo a root) con el nombre homes-backup. o e 10 . 11. o 10.

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

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

txt fi done echo "Has introducido $CONTADOR palabras.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 .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." 3. mediante exp. Modifique de nuevo el programa. que las memorizar´." # Borrar fichero auxiliar: cat /dev/null > palabras. se le devuelva la palabra que introdujo u en esa posici´n. u #!/bin/bash # Limpiar pantalla: clear # VariableS: DATO="" CON=0 # Instrucciones: echo "Introduzca las palabras que quiera. se le devolver´ la palabra o a n´mero cinco del fichero ”palabras. Consiga que si el usuario introduce un n´mero en lugar de una palabra.txt # Bucle: while [ "$DATO" != "salir" ] do read -p "¿Palabra a guardar? " DATO # Comprobar. Por ejemplo si introduce ”5”." e echo "Pulsa (’salir’) para terminar.txt”.

\nAdi´s. Medio: Cree un script que pida n´meros al usuario hasta que este teclee u la palabra ”promedio”." # Sumar VAR a lo anterior: RES=$(expr $RES + $VAR) done # Resultado: echo " El resultado es $RES. Escriba un programa que calcule el resultado de sumar todos los n´meros u del 1 al 100 secuencialmente.org/wiki/Media_aritm%C3%A9tica 14 . #!/bin/bash clear # Variables: CONTADOR=0 8 http://es. Despu´s calcule la media aritm´tica8 entre todos e e ellos." 5. es decir: 1 + 2 + 3 + 4 + 5.echo -e "\nERROR: No has introducido tantas palabras.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.txt fi fi done echo -e "\nTecleaste $CON palabras. #!/bin/bash # VariableS: RES=0 # Bucle: for VAR in $(seq 1 100) do echo "Sumando $RES + $VAR...\n" else cat palabras.wikipedia.\n" o 4.

#!/bin/bash clear 15 . Guarde ese fichero como ”nombre-edad.") echo "El promedio es $SUMA entre $CONTADOR igual a ${PROMEDIO}. una edad expresada en a˜os. separadas por una coma.”. por ejemplo para la anterior dir´ ”Juan ıa tiene 24 a˜os.” para cada una de las l´ n ıneas. n #!/bin/bash clear for LINEA in $(cat nombre-edad.") EDAD=$(echo $LINEA|cut -f2 -d".24”.txt|tr " " "_") do NOMBRE=$(echo $LINEA|cut -f1 -d".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." 6. Cree un fichero que contenga una lista de cinco nombres de pila y. $SUMA / $CONTADOR"|bc|tr ". Por ejemplo una l´ n ınea ser´ ”Juan." PROMEDIO=$(echo "scale=2.txt” y escriıa ba un gui´n que lo recorra y diga por pantalla ”Tal nombre tiene tantos o a˜os. 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.") echo "$(echo $NOMBRE|tr "_" " ") tiene $EDAD a~os." "." n done 7.

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

USUUID=$(echo $linea|cut -f3 -d":") if [ $USUUID -lt 1000 ] then echo "$USUUID es un usuario de sistema. 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. 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.") echo "Creando usuario $NOMBRE." useradd -g ejercicios -m $NOMBRE if [ $? -eq 0 ] then echo "Creado correctamente." else echo "ERROR creando usuario.txt|tr " " "-"|tr "A-Z" "a-z") do NOMBRE=$(echo $i|cut -f1 -d"..tgz /home if [ $? -eq 0 ] then echo "OK" else echo "ERROR" exit 1 fi 9..." tar czf /root/backups/homes-backup.# Crear directorio de backups: mkdir -p /root/backups # Bucle: for i in $(cat nombre-edad..\n\n" o echo -n "Creando copia de seguridad de /home." # exit 1 fi done echo -e "FIN de creaci´n de usuarios." 17 .

echo "El usuario 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.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.. echo "El usuario $DIR no existe.." cat /etc/passwd | grep $DIR &> /dev/null if [ $? -eq 0 ] then # El usuario existe.. Antes de probarlo cree varios directorios dentro de /home." 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. #!/bin/bash clear for DIR in $(ls -C1 /home) do echo "Comprobando directorio $DIR." else # El usuario no existe." read -p "¿Comprimimos el directorio y lo eliminamos? (s/n): " \ -n1 SN echo 18 ..

tgz /home/$DIR echo "Borrando /home/$DIR. o e 19 . # comprimiendo un backup previamente. echo "Comprimiendo backup de $DIR.." ı fi done 12..if [[ "$SN" == "s" || "$SN" == "S" ]] then # Por tanto hay que borrar el directorio fantasma.. compruebe si est´ instalado o no." 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." fi fi done 11. y que compruebe que la primera l´ ınea de cada uno de ellos es ”#!/bin/bash”. y si no lo est´ de la opci´n de obtener m´s a a o a informaci´n sobre ´l o de instalarlo. Escribe un programa que dado un nombre de paquete de Debian. ı 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." tar czf /root/backups/$DIR." rm -Rf /home/$DIR echo "El directorio $DIR ha sido comprimido y eliminado. Escriba un gui´n que repase todos los ficheros de ejercicios que ha hecho o hasta ahora.. #!/bin/bash clear echo "Comprobando forma 1.

utilice un bucle until para ello. #!/bin/bash clear contador=1 until [ $contador -eq 100 ] do echo -n "${contador} " let contador++ done echo -e "\nFin de programa. Construya un programa que escriba por pantalla una secuencia de 1 a 99.#! /bin/bash clear read -p "Introduzca el nombre del paquete: " nombre aptitude search $nombre|grep -E "^i.*$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.\n" 20 .

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

Sign up to vote on this title
UsefulNot useful