Shell scripting en Linux. Introducción

Documentos relacionados
Shell scripting en Linux


Shell Script Sistemas Operativos III - ITS EMT - CETP

Que es el Shell? Kernel. Other programs. csh. bash. X window

Taller de programación shell

Inmersión Linux: de 0 a 100 en 30 Horas Tema 4: Shell Scripting. J. Félix Ontañón

PROGRAMACIÓN DEL INTÉRPRETE DE COMANDOS DE UNIX/LINUX

Sistemas Operativos sesión 13: shell-scripting

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

PROGRAMACIÓN DEL SHELL

Shell Power!!! Comandos básicos de consola

Administración UNIX: Programación en bash

BASH Scripting. Contenidos. BASH: Bourne-Again SHell. Hola mundo!

Programación shell en Unix/Linux ksh, bash, sh (con ejercicios corregidos) (4ª edición)

Sistemas Operativos. Bourne Again Shell. Dr. Wenceslao Palma M.

PROGRAMACIÓ E SHELL DE LI UX.

Tema: Introducción a los comandos Linux

EJERCICIOS MANEJO DE ESTRUCTURAS BÁSICAS SCRIPTS

Creación De Scripts Ejecutables

Estructuras de Control. Cecilia Curlango Rosas

LINUX - El intérprete de órdenes I

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

Objetivos y Temario CURSO LINUX. PRINCIPIOS BASICOS

Programación shell-scripts 1 LA SHELL

Introducción a Python. Cecilia Manzino

Introducción a Linux. El regreso a los años 70: la consola (I)

Facultad de Ingeniería Universidad de Buenos Aires Sistemas Operativos Lic. Ing. Osvaldo Clúa Lic. Adrián Muccio.

Tema: Uso de Bash en Linux.

Facultad de Ingeniería Universidad de Buenos Aires Sistemas Operativos Lic. Ing. Osvaldo Clúa Lic. Adrián Muccio.

Prácticas de Fundamentos del Software

Introducción al Sistema Operativo Unix

Fundamentos de Programación

Tema 7:Línea de ordenes del sistema operativo.

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Programación shell en Unix/Linux sh, ksh, bash (con ejercicios corregidos) (3ª edición)

PROGRAMACIÓN DE LA SHELL DE UNIX/LINUX

LINUX - Los archivos de órdenes I

Scripts en GNU/Linux

Sistema de archivos. El sistema de archivos tiene una serie de directorios estándar:

LINUX - El intérprete de órdenes II

Linux Principios básicos de uso del sistema [4ª edición]

Programación en Shell Bash

El sistema operativo Linux

Instituto Tecnológico Las Américas (ITLA) Sistemas Operativos 3 (SO3) Daniel Alejandro Moreno Martínez. Matrícula:

El entorno de programación UNIX. CI-2400 Programación Avanzada en Sistemas de Tipo UNIX Prof. Braulio José Solano Rojas ECCI, UCR

2 Comandos para imprimir lpr le lpr -P printer -h -s le lpq imprime le en la impresora por defecto imprime le en la impresora printer sin pagina de ca

Tema: Uso de Bash en Linux Parte II.

Características de JavaScript

GNU/Linux desde la línea de comandos. Pablo Garaizar Sagarminaga (txipi) Alvaro Uría Avellanal (Fermat)

Programando con el intérprete de órdenes (shell) de UNIX

Linux 101 Explorando la línea de comandos

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

Facultad de Ingeniería Universidad de Buenos Aires 7508 Sistemas Operativos

ADMINISTRACIÓN DE USUARIOS EN LINUX

1. Por qué decimos que "Linux" es solamente el kernel del sistema operativo que utilizamos?

El shell de GNU/Linux

SEMANA N 9 NOMBRE EXPERIENCIA: Funciones, variables y arreglos en BASH UNIDAD DE APRENDIZAJE: Introducción a los SCRIPTS

REFERENCIA DEL LENGUAJE

Comandos Básicos de Linux

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Pre-Laboratorio 1 MA-33A : Introducción a Matlab

Mª DOLORES CARBALLAR FALCÓN L

TEMA 6: Manejo de archivos, permisos y navegación en GNU/LINUX.

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

PHP: Lenguaje de programación

Creación de Shell Scripts

Taller de Sistemas Operativos I Red Hat Academy. Sesión 07a El intérprete BASH y escritura de scripts en GNU/Linux

9) Despliegue el mismo archivo de nuevo, pero esta vez utilice solo las teclas del cursor para ejecutar el comando sin tener que digitarlo de nuevo.

1. Introducción Linux. 2. Comandos de Linux Comandos básicos

LENGUAJES DE CONTROL DE ÓRDENES: EL KORN SHELL (KSH)

Lenguaje de Programación: C++ Repaso de Material C++

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

Instituto Tecnológico de Las Américas (ITLA)

Seminario de introducción al uso del sistema operativo UNIX

Transcripción:

Shell scripting en Linux Roberto Gómez Cárdenas rogomez@itesm.mx http://homepage.cem.itesm.mx/rogomez Lámina 1 Introducción Shell Interfaz con el usuario Interprete de comandos Aspectos de programación Shell script Ejecución automática de comandos Procesamiento en batch de comandos Tareas repetitivas Lámina 2 Dr. Roberto Gómez Cárdenas 1

Shells en Linux Existen varios disponibles Ejemplos Bourne shell: sh Korn shell: ksh C shell: csh Bash: bsh El shell bash es el más popular. Lámina 3 El Bourne Again Shell Abreviado shell Es el shell por default en la mayoría de las distribuciones Linux También usado en todas las plataformas Unix Contiene características de ksh, csj, sh, etc Lámina 4 Dr. Roberto Gómez Cárdenas 2

Los scripts Archivos que contienen comandos a ser ejecutados por el shell. Puede ser cualquier comando que pueda teclearse a partir del prompt: comando que invoque una utilidad Unix, (vi, netscape, etc) un programa compilado otro script Aparte de estos comandos existe un grupo de comandos, (los comandos de control de flujo), que fueron diseñados para ser usados en scripts. Lámina 5 Características programación bash Soporta varías características de programación Variables, arreglos, ciclos, operadores de decisión, funciones, parámetro posicionales Pipes, redirección entrada/salida Características varias Expansiones, control de trabajos (jobs) Comandos construidos a su interior read, echo, source, alias Lámina 6 Dr. Roberto Gómez Cárdenas 3

Un script shell muy simple # Archivo: p1 # Uses the cat command to display a file echo Ejemplo de script echo n Fecha: date echo Usuarios conectados who echo Contenido directorio trabajo ls -l Lámina 7 Ejecutando un script shell Primer método $ chmod u+x catfile.sh $./catfile.sh file1 Segundo método $ bash catfile.sh file1 Lámina 8 Dr. Roberto Gómez Cárdenas 4

Variables Posible usar variables como en cualquier lenguaje de programación. Valores siempre almacenados como strings Existen operadores matemáticas en el lenguaje shell que convertirá variables a número para cálculos No es necesario declarar una variable Con solo asignar un valor a su referencia, esta será creada Ejemplo, nombre archivo: sc1 STR= Hello World! echo $STR Lámina 9 Carácterísticas variables Las variables no cuentan con un tipo. Variables pueden tomar un número o un carácter. cont = 0 cont = domingo El carácter \ es el carácter de escape y preserva el valor literario del carácter que le sigue $ ls \* ls *: No such file or directory $ Lámina 10 Dr. Roberto Gómez Cárdenas 5

Apostrofes y comillas Cuando se asignan cadenas de caracteres que contiene espacios o caracteres especiales, la cadena debe estar encerrada entre apostrofes o comillas El uso de comillas (partial quoting) dentro de una cadena de caracteres permitira que cualquier variable dentro de las comillas sea interpretada $ var= test string $ newvar= Value of var is $var $ echo $newvar Value of var is test string $ Lámina 11 Apostrofes y comillas El uso de apostrofes (full quoing) dentro de una cadena de caracteres no permitirá una interpretación de variables $ var= prueba 1 $ newvar= El valor de var es: $var $ echo $newvar El valor de var es: $var $ Lámina 12 Dr. Roberto Gómez Cárdenas 6

Ejemplos $ pippo= pluto $ pippo =pluto $ ls [Pp]* $ ls [Pp]* $ ls [Pp]* error no resuelto $ var= (]\\{}\$\ $ echo $var $ echo $var $ echo $var $ echo \z # z $ echo \\z # \z $ echo \\z # \\z Lámina 13 Más ejemplos $ pippo= cat $ echo comando = \ $pippo \ comando = cat $ echo comando = \ $pippo \ comando =\ $pippo \ $ echo comando = $pippo comando = $pippo $ Lámina 14 Dr. Roberto Gómez Cárdenas 7

El comando export Lámina 15 Comando activa una variable en el ambiente de tal forma que sea accesible por el proceso hijo. Ejemplo $ x=hello $ bash # correr un shell hijo $ echo $x # ningún valor en x $ exit # regresar al padre $ export x $ bash $ echo $x Hello # aquí esta el valor $ El comando export Si el proceso hijo modifica la variable, no se modificará el valor original asignado por el proceso padre. Esto se puede verificar de la siguiente forma: Lámina 16 $ x=cachafas $ echo $x cachafas $ exit $ echo $x Hello $ Dr. Roberto Gómez Cárdenas 8

Variables de ambiente Existen dos tipos de variables Variables locales Variables de ambiente Variables ambiente Son inicializadas por el sistema y se pueden listar con el comando env Almacenan valores especiales Lámina 17 Ejemplo salida comando env $ env HOSTNAME=localhost PVM_RSH=/usr/bin/rsh SHELL=/bin/bash TERM=xterm HISTSIZE=1000 USER=root LS_COLORS=no=00:fi=00:di=00;34: ln=00;36:pi=40;33:so=00;35 PVM_ROOT=/usr/share/pvm3 USERNAME=root MAIL=/var/spool/mail/root PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin: INPUTRC=/etc/inputrc PWD=/root LANG=en_US.UTF-8 : : : Lámina 18 Dr. Roberto Gómez Cárdenas 9

Ejemplo salida comando env : : : SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SHLVL=1 HOME=/root BASH_ENV=/root/.bashrc LOGNAME=root LESSOPEN= /usr/bin/lesspipe.sh %s DISPLAY=:0.0 G_BROKEN_FILENAMES=1 XAUTHORITY=/root/.xauthauuuYC _=/bin/env $ Lámina 19 Algunas variables de ambiente LOGNAME: contiene el nombre del usuario HOSTNAME: contiene el nombre de la computadora MACHTYPE: hardware del sistema PS1: secuencia caracteres mostrados antes del prompt UID: uid del usuario SHLVL: el nivel del shell Lámina 20 Dr. Roberto Gómez Cárdenas 10

Variables predefinidas para lectura de parámetros en la línea de comandos Variable $? $0 $1 a $9 $# $* $$ $! Significado Valor de salida del último comando, 0 si todo salió bien nombre del script argumentos que se pasaron al script numero argumentos pasados al script lista de argumentos a partir de $1 numero pid del proceso actual número pid del proceso hijo recordar que para desplegar su valor es necesario usar el comando echo Lámina 21 Ejemplo de uso variables parámetros $ more p2 echo Nombre del script: $0 echo Numero argumentos: $# echo Lista de argumentos: $* echo pid del proceso actual: $$ echo pid del proceso hijo: $! $ chmod u+x p2 $./p2 uno dos tres Nombre del script:./s1 Numero de argumentos: 3 Lista de argumentos: uno dos tres pid del proceso actual: 3818 pid del proceso hijo: $ Lámina 22 Dr. Roberto Gómez Cárdenas 11

El prompt Símbolo que indica que el shell esta listo para recibir instrucciones. Existen prompts por defeault, dependiendo del shell y tipo de unix utilizado $ % # bourne shell o korn shell c shell o tc shell representa que el usuario es root Es posible que un usuarios defina su propio prompt a través de la variable de ambiente correspondiente En el caso de Linux es PS1, por ejemplo el valor PS1 = '\[\u@\h \W]$ ' produce el siguiente prompt [toto@localhost bin]$ Lámina 23 Opciones para configurar el prompt Carácteres \u \W \w \t \d \s \h \# \! \$ \nnn Significado Nombre usuario Directorio trabajo Ruta completa de trabajo La hora actual La fecha actual El nombre del shell El nombre de la máquina actual El número de comando La posición en el history Carácter de prompt según el shell Carácter nnn (en octal) Lámina 24 Dr. Roberto Gómez Cárdenas 12

Ejercicio Modifique su variable de ambiente prompt de tal forma que despliegue un prompt con las siguientes características: Muestre el nombre del usuario La hora entre parantesis, precedida y seguida de un blanco El carácter dos puntos : El numero de instrucción El carácter mayor que > Un ejemplo de lo anterior se presenta a continuación: rogomez (13:34) :23> Lámina 25 Solución ejercicio Lámina 26 Dr. Roberto Gómez Cárdenas 13

Comando exit Puede ser usado para terminar un script También puede regresar un valor, el cual esta disponible al padre del proceso Sintaxis exit nnn donde nnn es el status de salida puede tomar un valor entre 0 y 255 es el programador el que decide que número usar Lámina 27 Comando exit Cuando un script termina con exit que no cuenta con parámetro el status regresado es el status con el que terminó el último comando ejecutado en el script. Lámina 28 COMMAND_1... # exit with status of last command. COMMAND_LAST exit COMMAND_1... # exit with status of last command. COMMAND_LAST exit $? Dr. Roberto Gómez Cárdenas 14

Comando read Permite solicitar datos de entrada y almacenarlos en una variable. Ejemplo, nombre archivo: leer #Nombre archivo: renombra echo -n De el nombre del archivo: read original echo n De el nuevo nombre: read nuevo mv $original $nuevo echo El archivo $original ahora se llama $nuevo" Lámina 29 Opciones comando read read s No hace un eco de la entrada read nn Solo acepta n caracteres como entrada read p mensaje Despliega mensaje read tt Acepta entrada por T segundos Lámina 30 Dr. Roberto Gómez Cárdenas 15

Ejercicio read Crear programa r1 Ejecutar programa echo De una frase read frase echo $frase Substituir la línea read frase por read s (guardar, ejecutar y conclusiones) read n5 (guardar, ejecutar y conclusiones) read p PRUEBA: (guardar, ejecutar y conclusiones) read t2 (guardar, ejecutar, no teclear nada en 3 segs y conclusiones) Lámina 31 Susbtitución comandos El backquote ` es diferente del single quote El primero es usado para la sustitución del comando `command` Ejemplo 1: Ejemplo 2 $ LIST=`ls` $ echo $LIST hello.sh read.sh PS1= `pwd` > /home/rinaldi/didattica/ > Lámina 32 Dr. Roberto Gómez Cárdenas 16

Susbtitución comandos Se puede llevar a cabo la substitución con el comando $(comando) Ejemplo 1 Ejemplo 2 Ejemplo 3 Ejemplo 4 $ LIST=$(ls) $ echo $LIST hello.sh read.sh rm $( find / -name *.tmp ) ls $( pwd ) ls $( echo /bin ) Lámina 33 Ejemplo $ a=`echo Hello` $ echo $a $ echo $a $ b=`ls /home` $ echo $b $ echo $a $b $ echo $a $b Lámina 34 Dr. Roberto Gómez Cárdenas 17

Operadores aritméticos Operador + - * / ** % Significado suma resta multiplicación división exponenciación modulo Lámina 35 Enunciado let Lámina 36 Usado para llevar a cabo funciones matemáticas $ let X=10+2*7 $ echo $X 24 $ let Y=X+2*4 $ echo $Y 32 Expresión puede ser evaluada con: $[expression] or $((expression)) $ echo $((123+20)) 143 $ VALORE=$[123+20] $ echo $[123*$VALORE] 1430 $ echo $[2**3] $ echo $[8%3] Dr. Roberto Gómez Cárdenas 18

Enunciados condicionales Decidir si una acción se lleva a cabo o no. Esta decisión se toma evaluando una expresión. Sintaxis básica: Lámina 37 if [ expression ]; then statements elif [ expression ]; then statements else statements fi if [ expression ]; then statements else statements fi if [ expression ]; then statements fi Una expresión puede ser Expresiones Comparación de strings Comparación numérica Operadores archivos Operadores lógicos Las expresiones deben ir entre corchetes, separadas por un espacio [ expresion ] Los operadores también deben ir separados por un espacio [ expresion1 operador expresion2 ] Lámina 38 Dr. Roberto Gómez Cárdenas 19

Comparativos strings Operador =!= -n -z Significado Comparar si dos strings son iguales Comparar si dos strings no son iguales Evaluar si longitud del string es mayor que cero Evaluar si longitud del string es igual a cero Ejemplo [ s1 = s2 ] [ s1!= s2 ] [ -n s1 ] [ -z s1 ] Significado Verdad si s1 es igual a s2, sino falso Verdad si es diferente a s2 sino falso Verdad si s1 no esta vacío, sino falso Verdad si la longitud de s1 es igual a cero, sino falso Lámina 39 Ejemplo expresiones strings # Archivo: checa echo -n Introduzca su nombre: " read name if [ $name = $USER ]; then echo Hola, $name. Como se encuentra hoy? else echo Usted no es $USER, quien es usted? fi Lámina 40 Dr. Roberto Gómez Cárdenas 20

Comparativos numéricos Operador -eq -ge -le -ne -gt -lt Significado Comparar si dos números son iguales Comparar si un número es mayor que o igual a otro Comparar si un número es menor que o igual a otro Comparar si dos números no son iguales Comparar si un número es mayor que otro Comparar si un número es menor que otro Lámina 41 Ejemplos comparativos Tomando en cuenta que n1 y n2 son dos números enteros Operador [ n1 -eq n2 ] [ n1 -ge n2 ] [ n1 -le n2 ] [ n1 -ne n2 ] [ n1 -gt n2 ] [ n1 -lt n2 ] Significado Verdad si n1 es igual a n2, falso en caso contrario Verdad si n1 es mayor o igual a n2, falso en caso contrario Verdad si n1 es menor o igual a n2, falso en caso contrario Verdad si n1 no es igual a n2, falso en caso contrario Verdad si n1 es mayor que n2, falso en caso contrario Verdad si n1 es menor que n2, falso en caso contrario Lámina 42 Dr. Roberto Gómez Cárdenas 21

Ejemplo # Archivo: numeros echo -n Introduzca un numero 1 < x < 10: " read num if [ $num -lt 10 ]; then if [ $num -gt 1 ]; then echo $num*$num=$(($num*$num)) else echo Mala insercion, es menor a 1! fi else echo Mala insercion, es mayor a 10! fi Lámina 43 Comparativos archivos Los más usados son: Operador -d -f -e -s -r -w -x Significado Verifica si el path es un directorio Verifica si el path es un archivo Verifica si el nombre del archivo existe Verifica si el archivo tiene una longitud mayor a cero Verifica si el archivo tiene permiso de lectura Verifica si el archivo tiene permiso de escritura Verifica si el archivo tiene permiso de ejecución Lámina 44 Dr. Roberto Gómez Cárdenas 22

Ejemplo Tomando en cuenta que fd es el nombre de un archivo Lámina 45 Operador [ -d fd ] [ -f fd ] [ -e fd ] [ -s fd ] [ -r fd ] [ -w fd ] [ -x fd ] Significado Verdad si fd es un directorio, falso en caso contrario Verdad si fd es un archivo, falso en caso contrario Verdad si fd existe, falso en caso contrario Verdad si la longitud del archivo fd es mayor a 0, falso en caso contrario Verdad si fd tiene permisos de lectura, falso en caso contrario Verdad si fd tiene permisos de escritura, falso en caso contrario Verdad si fd tiene permisos de ejecución, falso en caso contrario Ejemplo # Nombre archivo: copia # Script que verifica que /etc/fstab existe, si es asi # lo copia, sino indica que no existe if [ -f /etc/fstab ]; then cp /etc/fstab. echo Hecho. else echo El archivo no existe. exit 1 fi Lámina 46 Dr. Roberto Gómez Cárdenas 23

Ejercicio Escriba un script, de nombre respaldo, que pregunte por el nombre de un archivo El script debe verificar si el archivo existe, y crear un directorio de nombre Backup Si el archivo existe debe copiar el archivo con el mismo nombre más.bak (si el.bak ya existe debe preguntar si desea reemplazarlo) Si el archivo no existe, entonces debe salirse del script con el mensaje: El archivo <arch> no existe!!! Lámina 47 Solución ejercicio if [! d./backup ] then mkdir./backup fi read p De el nombre del archivo: a1 if [ -f $a1 ] then cp $a1./backup/$pippo.bak else echo El archivo $a1 no existe!!! fi Lámina 48 Dr. Roberto Gómez Cárdenas 24

Operadores lógicos Operador! -a && -o Significado Negación (NOT) de una expresión lógica AND lógico entre dos expresiones lógicas OR lógico entre dos expresiones lógicas Lámina 49 # Nombre archivo: if3.sh echo -n Enter a number 1 < x < 10: read num if [ $num -gt 1 a $num -lt 10 ]; then echo $num*$num=$(($num*$num)) else echo Wrong insertion! fi Parámetros shell Parámetros posicionales Asignados de los argumentos del shell cuando el script es invocado El parámetro posicional N puede ser referenciado como ${N}, o como $N donde N consiste de un simple dígito $0: el nombre del script corriendo $1: el primer parámetro $2: el segundo parámetro etc. Lámina 50 Dr. Roberto Gómez Cárdenas 25

Parámetros shell Parámetros especiales Variable $? $0 $@ $# $* $$ $! Significado Valor de salida del último comando, 0 si todo salió bien nombre del script Arreglo de palabras conteniendo todos los parámetros pasados al script numero argumentos pasados al script lista de argumentos a partir de $1 numero pid del proceso actual número pid del proceso hijo Lámina 51 Enunciado case Usado para ejecutar enunciados basado en valores específicos. Sintaxis case $var in val1) statements;; val2) statements;; *) statements;; esac Lámina 52 Dr. Roberto Gómez Cárdenas 26

Ejemplo case Lámina 53 # Nombre archivo: case.sh echo -n Enter a number 1 < x < 10: read x case $x in 1) echo Value of x is 1. ;; 2) echo Value of x is 2. ;; 3) echo Value of x is 3. ;; 4) echo Value of x is 4. ;; 5) echo Value of x is 5. ;; 6) echo Value of x is 6. ;; 7) echo Value of x is 7. ;; 8) echo Value of x is 8. ;; 9) echo Value of x is 9. ;; 0 10) echo wrong number. ;; *) echo Unrecognized value. ;; esac Enunciados iteración Estructura for es usada para ciclar a través de un rango de variables. Sintaxis for var in list do statements done Lámina 54 Dr. Roberto Gómez Cárdenas 27

Ejemplo iteración Lámina 55 Un clásico #Nombre archivo: itera let sum=0 for num in 1 2 3 4 5 do let sum = $sum + $num done echo $sum Listado todos los archivos del directorio actual #Nombre archivo: lista for x in * do ls -l $x sleep 1 done Enunciado while Estructura ciclo Usada para ejecutar un conjunto de comandos mientras una condición especificada es verdad Sintaxis while expression do statements done Lámina 56 Dr. Roberto Gómez Cárdenas 28

Ejemplo uso enunciado while # Nombre archivo: while.sh echo n Enter a number: ; read x let sum=0; let i=1 while [ $i le $x ]; do let sum=$sum+$i let i=$i+1 done echo the sum of the first $x numbers is: $sum Lámina 57 Enunciado continue Provoca un salto a la siguiente iteración del ciclo, saltando los comandos restantes. # Nombre archivo: cont.sh LIMIT=19 echo echo Printing Numbers 1 through 20 (but not 3 and 11) a=0 while [ $a -le $LIMIT ]; do a=$(($a+1)) if [ $a -eq 3 ] [ $a -eq 11 ] then continue fi echo -n $a - done Lámina 58 Dr. Roberto Gómez Cárdenas 29

Enunciado break Termina el cliclo (se sale de él) # Nombre archivo: break.sh LIMIT=19 echo Printing Numbers 1 through 20, but something happens after 2 a=0 while [ $a -le $LIMIT ]; do a=$(($a+1)) if [ $a -gt 2 ] then break fi echo -n $a - done echo; echo; echo exit 0 Lámina 59 Enunciado until Similar a la estructura while Cicla hasta que la condición es verdad Sintaxis until [expression] do statements done Lámina 60 Dr. Roberto Gómez Cárdenas 30

Ejemplo enunciado until #!/bin/bash # Nombre archivo: countdown.sh echo Enter a number: ; read x echo ; echo Count Down until [ $x -le 0 ]; do echo $x x=$(($x 1)) sleep 1 done echo ; echo GO! Lámina 61 Ejercicio Escribir un programa copiabin.sh que mueva todos los programas del directorio actual (archivos ejecutables) hacia el subdirectorio bin del directorio hogar del usuario, muestre los nombres de los que mueve e indique cuántos ha movido o que no ha movido ninguno. Si el directorio bin no existe, deberá ser creado. Lámina 62 Dr. Roberto Gómez Cárdenas 31

Solución ejercicio Lámina 63 # copia archivos ejecutables hacia $HOME/bin, si directorio bin no existe lo crea if [! -d $HOME/bin ] then mkdir $HOME/bin fi # copia de archivos N=0 # contador de archivos copiados for ARCH in * do if [ -x $ARCH -a -f $ARCH ] # ejecutable y archivo común (no directorio) then cp $ARCH $HOME/bin echo " $ARCH fue copiado a $HOME/bin" N=`expr $N + 1` fi done if [ $N -eq 0 ] then echo "No se copió ningún archivo" else echo "Fueron copiados $N archivos" fi Manipulación sobre strings Bash cuenta con operaciones de manipulación de strings. Operaciones Operación ${#string} ${string:posicion} ${string:posicion:long} Significado Proporciona el tamaño del string Extrae un sub-string de $string en la posición $posicion Extrae $long caracteres de un substring de $string en $posicion Lámina 64 Dr. Roberto Gómez Cárdenas 32

Ejemplo strings $ st=0123456789 $ echo ${#st} 10 $ echo ${st:6} 6789 $ echo ${st:6:2} 67 $ Lámina 65 Dr. Roberto Gómez Cárdenas 33