28
Sistemas Operativos Comandos Linux Dr. Roberto Gómez Cárdenas 1 Dr. Roberto Gómez C. Lámina 1 Shell scripting en Linux Roberto Gómez Cárdenas [email protected] http://homepage.cem.itesm.mx/rogomez Dr. Roberto Gómez C. Lámina 2 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

Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

  • Upload
    others

  • View
    47

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 1

Dr. Roberto Gómez C.Lámina 1

Shell scripting en Linux

Roberto Gómez Cá[email protected]

http://homepage.cem.itesm.mx/rogomez

Dr. Roberto Gómez C.Lámina 2

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

Page 2: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 2

Dr. Roberto Gómez C.Lámina 3

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.

Dr. Roberto Gómez C.Lámina 4

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

Page 3: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 3

Dr. Roberto Gómez C.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

Dr. Roberto Gómez C.Lámina 6

Un script shell muy simple

#!/bin/bash# Archivo: catfile.sh# Uses the cat command to display a file

FILE=$1echo "Displaying file $FILE"cat $FILE

Page 4: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 4

Dr. Roberto Gómez C.Lámina 7

Ejecutando un script shell

• Primer método

• Segundo método

$ chmod +x catfile.sh$ ./catfile.sh

$ bash catfile.sh

Dr. Roberto Gómez C.Lámina 8

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#!/bin/bashSTR=“Hello World!”echo $STR

Page 5: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 5

Dr. Roberto Gómez C.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$

Dr. Roberto Gómez C.Lámina 10

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 $newvarValue of var is test string

Page 6: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 6

Dr. Roberto Gómez C.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=’test string’$ newvar=’Value of var is $var’$ echo $newvarValue of var is $var

Dr. Roberto Gómez C.Lámina 12

Ejemplos

$ pippo= pluto$ pippo =pluto

$ ls [Pp]*$ ls “[Pp]*”$ ls ‘[Pp]*’

$ var=“’(]\\{}\$\””$ echo $var$ echo “$var”$ echo ‘$var’

$ echo \z # z$ echo \\z # \z$ echo ‘\\z’ # \\z

error

no resuelto

Page 7: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 7

Dr. Roberto Gómez C.Lámina 13

Más ejemplos

$ pippo= cat

$ echo “comando = \” $pippo \” “comando =“ cat ”

$ echo ‘comando = \” $pippo \” ‘comando =\” $pippo \”

$ echo ‘comando = ” $pippo ” ‘comando =” $pippo “$

Dr. Roberto Gómez C.Lámina 14

El comando export

• 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 $xHello # aquí esta el valor$

Page 8: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 8

Dr. Roberto Gómez C.Lámina 15

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:

$ x=cachafas$ exit$ echo $xHello$

Dr. Roberto Gómez C.Lámina 16

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

Page 9: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 9

Dr. Roberto Gómez C.Lámina 17

Ejemplo salida comando env

$ envHOSTNAME=localhostPVM_RSH=/usr/bin/rshSHELL=/bin/bashTERM=xtermHISTSIZE=1000USER=rootLS_COLORS=no=00:fi=00:di=00;34: ln=00;36:pi=40;33:so=00;35PVM_ROOT=/usr/share/pvm3USERNAME=rootMAIL=/var/spool/mail/rootPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:INPUTRC=/etc/inputrcPWD=/rootLANG=en_US.UTF-8

:::

Dr. Roberto Gómez C.Lámina 18

Ejemplo salida comando env

:::

SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpassSHLVL=1HOME=/rootBASH_ENV=/root/.bashrcLOGNAME=rootLESSOPEN=|/usr/bin/lesspipe.sh %sDISPLAY=:0.0G_BROKEN_FILENAMES=1XAUTHORITY=/root/.xauthauuuYC_=/bin/env$

Page 10: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 10

Dr. Roberto Gómez C.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

Dr. Roberto Gómez C.Lámina 20

Lo primero es lo primero: el prompt

• Símbolo que indica que el shell esta listo para recibir instrucciones.

• Existen prompts por defeault, dependiendo del shelly 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 prompta través de la variable de ambiente correspondiente– En el caso de Linux es PS1, por ejemplo el valor

– produce el siguiente promptPS1 = '\[\u@\h \W]$ '

[toto@localhost bin]$

Page 11: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 11

Dr. Roberto Gómez C.Lámina 21

Opciones para configurar el prompt

Carácter nnn (en octal)\nnn

Carácter de prompt según\$

La posición en el history\!

El número de comando\#

El nombre de la máquina actual\h

El nombre del shell\s

La fecha actual\d

La hora actual\t

Ruta completa de trabajo\w

Directorio trabajo\W

Nombre usuario\u

SignificadoCarácteres

Dr. Roberto Gómez C.Lámina 22

Comando exit

• Puede ser usado para terminar un script• También puede regresar un valor, el cual esta

disponible al padre del proceso• Sintaxis

– 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

exit nnn

Page 12: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 12

Dr. Roberto Gómez C.Lámina 23

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.

#!/bin/bash

COMMAND_1

. . .

# exit with status of last command. COMMAND_LAST

exit

#!/bin/bash

COMMAND_1

. . .

# exit with status of last command. COMMAND_LAST

exit $?

Dr. Roberto Gómez C.Lámina 24

Comando read

• Permite solicitar datos de entrada y almacenarlos en una variable.

• Ejemplo

#!/bin/bashecho -n “Enter name of file to delete: ”read fileecho “Type 'y' to remove it, 'n' to change your mind ... ”rm -i $fileecho "That was YOUR decision!"

Page 13: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 13

Dr. Roberto Gómez C.Lámina 25

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

Dr. Roberto Gómez C.Lámina 26

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 $LISThello.sh read.sh

PS1=“`pwd` >”/home/rinaldi/didattica/ >

Page 14: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 14

Dr. Roberto Gómez C.Lámina 27

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 $LISThello.sh read.sh

rm $( find / -name “*.tmp” )

ls $( pwd )

ls $( echo /bin )

Dr. Roberto Gómez C.Lámina 28

Ejemplo

$ a=`echo Hello`

$ echo $a

$ echo ‘$a’

$ b=`ls /home`

$ echo $b

$ echo $a $b

$ echo “$a $b”

Page 15: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 15

Dr. Roberto Gómez C.Lámina 29

Operadores aritméticos

modulo%

multiplicación*

división/

exponenciación**

resta-

suma+

SignificadoOperador

Dr. Roberto Gómez C.Lámina 30

Enunciado let

• Usado para llevar a cabo funciones matemáticas

• Expresión puede ser evaluada con:$[expression] or $((expression))

$ let X=10+2*7$ echo $X24$ let Y=X+2*4 $ echo $Y32

$ echo $((123+20))143

$ VALORE=$[123+20]$ echo $[123*$VALORE]

1430$ echo $[2**3]$ echo $[8%3]

Page 16: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 16

Dr. Roberto Gómez C.Lámina 31

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:

if [expression];then

statementselif [expression];

thenstatements

elsestatements

fi

Dr. Roberto Gómez C.Lámina 32

Expresiones

• Una expresión puede ser– Comparación de strings

– Comparación numérica

– Operadores archivos

– Operadores lógicos

Page 17: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 17

Dr. Roberto Gómez C.Lámina 33

Comparativos strings

Evaluar si longitud del string es igual a cero-z

Evaluar si longitud del string es mayor que cero-n

Comparar si dos strings no son iguales!=

Comparar si dos strings son iguales=

SignificadoOperador

Verdad si -z

Verdad si s1 no esta vacío, sino falso-n

Verdad si es diferente a s2 sino falso!=

Verdad si s1 es igual a s2, sino falso[ s1 = s2 ]

SignificadoEjemplo

Dr. Roberto Gómez C.Lámina 34

Comparativos numéricos

Comparar si un número es mayor que otro -gt

Comparar si dos números no son iguales-ne

Comparar si un número es mayor que otro -lt

Comparar si un número es menor que o igual a otro-le

Comparar si un número es mayor que o igual a otro-ge

Comparar si dos números son iguales-eq

SignificadoOperador

Page 18: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 18

Dr. Roberto Gómez C.Lámina 35

Comparativos archivos

Verifica si el archivo tiene permiso de escritura-w

Verifica si el archivo tiene permiso de lectura-r

Verifica si el archivo tiene una longitud mayor a cero-s

Verifica si el nombre del archivo existe-e

Verifica si el archivo tiene permiso de ejecución-x

Verifica si el path es una liga simbólica-s

Verifica si el path es un archivo-f

Verifica si el path es un directorio-d

SignificadoOperador

Dr. Roberto Gómez C.Lámina 36

Ejemplo

#!/bin/bashif [ -f /etc/fstab ];

thencp /etc/fstab .

echo “Hecho.”elseecho “El archivo no existe.”

exit 1fi

Page 19: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 19

Dr. Roberto Gómez C.Lámina 37

Ejercicio

• Escriba un script que acepte el nombre de un archivo como entrada– 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 !!! “

Dr. Roberto Gómez C.Lámina 38

Solución ejercicio

#!/bin/bashif [ ! –d ./Backup ] then mkdir ./Backupfiread –p “insert the name of a file” pippoif [ -f $pippo ]then cp $pippo ./Backup/$pippo.bakelse echo “The file $pippo does not exist!!!”fi

Page 20: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 20

Dr. Roberto Gómez C.Lámina 39

Operadores lógicos

OR lógico entre dos expresiones lógicas-o ||

AND lógico entre dos expresiones lógicas-a &&

Negación (NOT) de una expresión lógica!

SignificadoOperador

#!/bin/bash# Nombre archivo: if3.shecho -n “Enter a number 1 < x < 10:”read numif [ “$num” -gt 1 –a “$num” -lt 10 ]; then

echo “$num*$num=$(($num*$num))”else

echo “Wrong insertion !”fi

Dr. Roberto Gómez C.Lámina 40

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.

Page 21: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 21

Dr. Roberto Gómez C.Lámina 41

Parámetros shell

• Parámetros especiales

numero pid del proceso actual$$

número pid del proceso hijo$!

lista de argumentos a partir de $1$*

numero argumentos pasados al script$#

Arreglo de palabras conteniendo todos los parámetros pasados al script

$@

nombre del script$0

Valor de salida del último comando, 0 si todo salió bien$?

SignificadoVariable

Dr. Roberto Gómez C.Lámina 42

Enunciado case

• Usado para ejecutar enunciados basado en valores específicos.

• Sintaxis

case $var inval1)

statements;;val2)

statements;;*)

statements;;esac

Page 22: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 22

Dr. Roberto Gómez C.Lámina 43

Ejemplo case

#!/bin/bash # Nombre archivo: case.shecho -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

Dr. Roberto Gómez C.Lámina 44

Enunciados iteración

• Estructura for es usada para ciclar a través de un rango de variables.

• Sintaxis

for var in listdo

statementsdone

Page 23: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 23

Dr. Roberto Gómez C.Lámina 45

Ejemplo iteración

#!/bin/bashlet sum=0for num in 1 2 3 4 5do

let “sum = $sum + $num”doneecho $sum

• Un clásico

• Listado todos los archivos del directorio actual#!/bin/bashfor x in *do

ls -l “$x”sleep 1

done

Dr. Roberto Gómez C.Lámina 46

Enunciado while

• Estructura ciclo

• Usada para ejecutar un conjunto de comandos mientras una condición especificada es verdad

• Sintaxis

while expressiondo

statementsdone

Page 24: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 24

Dr. Roberto Gómez C.Lámina 47

Ejemplo uso enunciado while

#!/bin/bashecho –n “Enter a number: ”read xlet sum=0let i=1while [ $i –le $x ]; do

let sum=$sum+$ilet i=$i+1

doneecho “the sum of the first $x numbers is: $sum”

Dr. Roberto Gómez C.Lámina 48

Enunciado continue

• Provoca un salto a la siguiente iteración del ciclo, saltando los comandos restantes.

#!/bin/bash # Nombre archivo: cont.shLIMIT=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 fiecho -n “$a ”

done

Page 25: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 25

Dr. Roberto Gómez C.Lámina 49

Enunciado break

• Termina el cliclo (se sale de él)

#!/bin/bash # Nombre archivo: break.shLIMIT=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 fiecho -n “$a ”

done echo; echo; echo exit 0

Dr. Roberto Gómez C.Lámina 50

Enunciado until

• Similar a la estructura while

• Cicla hasta que la condición es verdad

• Sintaxis

until [expression]do

statementsdone

Page 26: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 26

Dr. Roberto Gómez C.Lámina 51

Ejemplo enunciado until

# !/bin/bash# Nombre archivo: countdown.shecho “Enter a number: ”; read xecho ; echo Count Downuntil [ “$x” -le 0 ]; do

echo $x x=$(($x –1))sleep 1

done echo ; echo GO !

Dr. Roberto Gómez C.Lámina 52

Ejercicio

• Escribir un programa copiabin.sh que muevatodos los programas del directorio actual (archivos ejecutables) hacia el subdirectoriobin del directorio hogar del usuario, muestrelos nombres de los que mueve e indiquecuántos ha movido o que no ha movidoninguno. Si el directorio bin no existe, deberá ser creado.

Page 27: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 27

Dr. Roberto Gómez C.Lámina 53

Solución ejercicio#!/bin/bash# copia archivos ejecutables hacia $HOME/bin, si directorio bin no existe lo creaif [ ! -d $HOME/bin ]thenmkdir $HOME/bin

fi# copia de archivosN=0 # contador de archivos copiadosfor ARCH in *do

if [ -x $ARCH -a -f $ARCH ] # ejecutable y archivo común (no directorio)thencp $ARCH $HOME/binecho " $ARCH fue copiado a $HOME/bin"N=`expr $N + 1`

fidoneif [ $N -eq 0 ]then

echo "No se copió ningún archivo"else

echo "Fueron copiados $N archivos"fi

Dr. Roberto Gómez C.Lámina 54

Manipulación sobre strings

• Bash cuenta con operaciones de manipulación de strings.

• Operaciones

Extrae $long caracteres de un substring de $string en $posicion

${string:posicion:long}

Extrae un sub-string de $string en la posición $posicion

${string:posicion}

Proporciona el tamaño del string${#string}

SignificadoOperación

Page 28: Shell scripting en Linux - cryptomex · – Bourne shell: sh – Korn shell: ksh – C shell: csh – Bash: bsh • El shell bash es el más popular. Lámina 4 Dr. Roberto Gómez

Sistemas Operativos Comandos Linux

Dr. Roberto Gómez Cárdenas 28

Dr. Roberto Gómez C.Lámina 55

Ejemplo strings

$ st=0123456789$ echo ${#st}10$ echo ${st:6} 6789$ echo ${st:6:2} 67$