PDF de programación - Tema 7: Shell Scripting

Imágen de pdf Tema 7: Shell Scripting

Tema 7: Shell Scriptinggráfica de visualizaciones

Publicado el 26 de Mayo del 2019
690 visualizaciones desde el 26 de Mayo del 2019
378,7 KB
46 paginas
Creado hace 14a (22/04/2010)
Scripts de Shell

Listas

Más herramientas

filtros y regexp

Tema 7: Shell Scripting

Enrique Soriano

Laboratorio de Sistemas,

Grupo de Sistemas y Comunicaciones,

URJC

22 de abril de 2010

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento -

NoComercial - SinObraDerivada (by-nc-nd). Para obtener la licencia completa, véase

http://creativecommons.org/licenses/by-sa/2.1/es. También puede solicitarse a Creative Commons, 559 Nathan

(cc) 2010 Grupo de Sistemas y Comunicaciones.

Abbott Way, Stanford, California 94305, USA.

Scripts de Shell

Listas

Más herramientas

filtros y regexp

¿Cuándo hago un script de Shell?

• Pasos para realizar una tarea:

1. Mirar si hay alguna herramienta que haga lo que queremos →

2. Si no encontramos, intentar combinar distintas herramientas

buscar en el manual.
→ programar un script de Shell.
IDEA: combinar herramientas que hacen bien una única tarea
para llevar a cabo tareas más complejas.
3. Si no podemos, hacer una herramienta → programar en C (u

otro lenguaje).

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Un script:

• Tiene que acabar en una nueva de línea.
• Tiene que tener permisos de ejecución.
• El comando built-in exit sale del script con el status indicado

en su argumento. Si no se le especifica, sale con el valor de
$status.

term % cat holamundo
#!/bin/rc
echo Hola mundo
exit ’’

term %

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Listas

• Cada elemento es una string (acabada en un caracter nulo).
• La llamada getenv() reemplaza los nulos por un espacio

(menos el último).

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Listas

term % x=(hola que tal)
term % x=(hola (que tal))
term % x=((hola que) (tal)) # es lo mismo!
term % echo $x(2) # el índice empieza en 1!
term % echo $#x # no de elementos
term % cat /env/x
term % xd -c /env/x

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Argumentos de un script

• $*

Lista con todos los argumentos.

• $#*

Número de argumentos (elementos de $*).

• $1,$2,..

Primer argumento, segundo...

• $0

Nombre del programa

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Variables especiales

• $home
• $pid
• $apid
• $prompt
• $path
• $status
• $ifs

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Operador de concatenación

term % z=$aˆ$b

• Si $#a es igual que $#b, se concatena el enésimo elemento de

$a con el enésimo de $b.

• Si es una cadena o una lista de un único elemento, concatena

ese elemento con todas (distribución).

• Si el número de elementos es distinto y mayor que uno, o

alguna lista está vacía: error.

term % chmod +x ’/un/path/largo/’ˆ(file1 file2)

Scripts de Shell

Listas

Más herramientas

filtros y regexp

De lista a cadena

• $"var

Se sustituye por una única cadena con todos los elementos de
$var concatenados. Por tanto, el número de elementos es 1.

term % var=(uno dos tres)
term % b=$"var
term % echo $var $b
term % echo $#var $#b
term % cat /env/var /env/b
term % xd -c /env/var /env/b

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Variables vacías

• lista vacía = variable con una string vacía

term % var1=()
term % var2=’’
term % echo $#var1 $#var2
term % echo $var1 $var2

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Más vale prevenir...

• rfork(1) es un built-in que permite configurar el proceso en el

que ejecuta el script.

• Padre e hijo comparten cosas por defecto: espacio de nombres

y entorno, entre otras.

• rfork n → nuevo espacio de nombres, copiado del padre.
• rfork N → nuevo espacio de nombres, limpio.
• rfork e → nuevo entorno, copiado del padre.
• rfork E → nuevo entorno, limpio.

#!/bin/rc
rfork e # casi siempre queremos esto
...

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Operaciones aritméticas

• La Shell no sabe nada sobre números.
• hoc(1) es potente para cálculos con coma flotante, tiene un
lenguaje parecido a C, constantes definidas (PI, PHI, E)...

• bc(1) es otra calculadora, más cómoda para cambiar de bases

(ibase y obase).

term % echo ’7 + 4’ | hoc
term % echo ’7 + 4’ | bc
term % result=‘{echo ’7 + 4’ | bc}
term % echo ’obase=16 ; 77 ’ | bc

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Test

También nos permite
• Comparaciones
• Comprobar si existen ficheros y directorios
• Comprobar permiso para leer, escribir y ejecutar

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Constructor de agrupaciones

• {...}

Los comandos se ejecutan como si fuera un único comando.

term % { echo hola ; echo adios } > /tmp/afile
term % { echo hola ; echo adios } | tr o O
term % { sleep 100 ; echo tiempo } &

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Subshell

• @{...}

Los comandos se ejecutan en un nuevo shell.
term % @{ cd /sys/src/cmd ; 8c -FVw ls.c}

Scripts de Shell

Listas

Más herramientas

filtros y regexp

For

• for ( var in lista ) {...}

Se itera por cada elemento en la lista. En n-ésima iteración,
$var contendrá el n-ésimo elemento de la lista.

term % for (i in a b c ) { echo elemento: $i }
term % for (i in ‘{ ls } ) { echo entrada: $i }
term % for (i in ‘{ seq 1 10 } ) { echo contador: $i }

Scripts de Shell

Listas

Más herramientas

filtros y regexp

If

• if ( comando ) {...}

if not {...}
Se ejecutan los comandos si el comando acaba con un estatus
correcto. En otro caso, se ejecutan los comandos del if not.
No puede haber un if not sin if.

term % if ( test -f fich.txt ) { echo si existe } ; if
not { echo no existe }

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Comparación de cadenas

cadena patrón ...

• ~
• Compara la cadena con cada patrón. Si algún patrón coincide
con la cadena, el status será correcto. En otro caso, el status
será erróneo.

• No confundir con globbing: no se intenta encajar el patrón

con los nombres de los ficheros.

• Para el patrón: * ? []
• Si cadena es una lista, se pasa a una string.

term % if ( ~
term % if ( ~

$var fich1.txt ){echo var es fich1.txt}
$var *.txt *.pdf){echo acaba en .txt o en .pdf}

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Negación

• ! comando

Si el status fue correcto, se cambia a erróneo, y viceversa.

term % if (! ~

$var *.txt)

{
}

echo var no acaba en .txt

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Switch

• switch( cadena ){
case patron1; ...;
case patron2 ; ....
}
Se ejecutan todos los comandos que correspondan al primer
patrón con el que encaje la cadena.

term % switch( $var ){
case *.txt

echo acaba en .txt

case *.pdf

echo acaba en .pdf

case *
}

echo acaba en otra cosa

Scripts de Shell

Listas

Más herramientas

filtros y regexp

And y Or

• comando1 && comando2 && ...

Se ejecuta el siguiente comando si el actual acaba con un
status correcto. Al final el status es un AND de todos.

• comando1 || comando2 || ...

Se ejecuta el siguiente comando si el actual acaba con status
incorrecto. Al final, el status es un OR de todos.

term % if ( test -f file1 && test -d dir1 )

{ echo existen }

term % test -f file1 && test -d dir1 && echo existen

Scripts de Shell

Listas

Más herramientas

filtros y regexp

While

• while ( comando ) { ... }

Se itera mientras que el comando salga con status correcto.

term % while ( test -f /tmp/file ){

echo /tmp/file sigue existiendo
sleep 10

}
term % while ( sleep 1 ){

# sleep siempre sale bien!!!
cat /tmp/file

}

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Filtros útiles

• sort

ordena las líneas de varias formas.

• uniq

elimina líneas contiguas repetidas.

• tail

muestra las últimas líneas.

P. ej: term % ps | tail +3 # a partir de la 3a
term % ps | tail -3 # las 3 ultimas
term % seq 1 1000 | sort
term % seq 1 1000 | sort -n

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Tr

• Traduce caracteres. El primer argumento es el conjunto de
caracteres a traducir. El segundo es el conjunto al que se
traducen. El enésimo carácter del primer conjunto se traduce
por el enésimo carácter del segundo.

• -d

Borra los caracteres del único conjunto que se le pasa como
argumento.

• Se le pueden dar rangos, p. ej.

term % cat fichero | tr a-z A-Z

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Expresiones regulares (regexp)

• Es un lenguaje formal para describir/buscar cadenas de

caracteres.

• Parecidas a los patrones de la Shell o de globbing, pero más

potentes.

• Una string encaja con sí misma, por ejemplo ’a’ con ’a’.

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Expresiones regulares (regexp)

• .

encaja con cualquier carácter, por ejemplo ’a’.

• [conjunto]

encaja con cualquier carácter en el conjunto, por ejemplo
[abc] encaja con ’a’. Se pueden especificar rangos, p. ej.
[a-zA-Z].

• [ˆconjunto]

encaja con cualquier carácter que no esté en el conjunto, por
ejemplo [ˆabc] NO encaja con ’a’, sin embargo sí encaja
con ’z’.

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Expresiones regulares (regexp)

• ˆ

encaja con principio de línea.

• $

encaja con final de línea.

• Una regexp e1 concatenada a otra regexp e2, e1e2, encaja con

una string si una parte p1 de la string encaja con e1 y otra
parte contigua, p2, encaja con e2.

P. ej:
’az’ encaja con la regexp [a-d]z

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Expresiones regulares (regexp)

• exp*

encaja si aparece cero o más veces la regexp que lo precede.

• exp+

encaja si aparece una o más veces la regexp que lo precede.

P. ej:
’aaa’ encaja con la regexp a*
’baaa’ encaja con la regexp ba+
’bb’ encaja con la regexp ba*
’bb’ no encaja con la regexp ba+

Scripts de Shell

Listas

Más herramientas

filtros y regexp

Expresiones regulares (regexp)

• exp?

enc
  • Links de descarga
http://lwp-l.com/pdf15981

Comentarios de: Tema 7: Shell Scripting (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad