Introduccion a la Teoria de Automatas Lenguajes y Computacion
Programando Scripts en Bourne Shell
Andrés J. Díaz ¿?
¿Qué es un Shell?
Definición técnica:
«El shell es una parte del SO encargada de validar los comandos introducidos por parte del
usuario, para posteriormente enviar las órdenes a otra parte del sistema operativo para su ejecuci
ón.»
Definición «cutre»:
El programita que traduce lo quetecleamos en cosas que entienda el sistema operativo.
¿Qué es un Shell tipo Bourne?
Tipos de shell en UNIX:
Bourne (sh)
Stephen Bourne 1979
C (csh)
Bill Joy 1980
Korn (ksh)
David Korn 1980
¡Y Bash!
«Bourne Again Shell» (Otro shell Bourne)
Proyecto GNU
Estándar IEEE POSIX
El Bourne Shell
Dos estilos de Shell Bourne:
Estilo BSD
Estilo SysV
Pero con POCASdiferencias:
BSD:
echo -n "sinretornodelinea"
SysV:
echo "sinretornodelinea\c"
El C Shell
Novedades
Mejoras en interactividad
Expansión de tildes (~)
Expansión de llaves ({a,b,...,n})
Builtins: pushd, popd, logout...
Además...
¡Creador de VI!
Bill Joy, Univ. de Berkeley (1980)
El Shell de Korn
Novedades
Expresiones aritméticas
Historial de comandos
Más expansiones deparámetros
Vectores («Arrays»)
Alias
Variables enteras
David Korn, Bell Labs (1957)
Bourne Again Shell (BASH)
¿Otro shell?
Proyecto GNU, por lo tanto libre
Mejoras de csh y de ksh
Más funcionalidad
Mejoras con respecto a Korn Shell (ksh88)
for aritmético: for ((expr1; expr2; expr3)); do list; done
de acuerdo con POSIX
«tilde expansion»
sustitución de procesos con tuberíasexpansión del «prompt»
redirección: &> (stdout y stderr), & /dev/null
Ortogonalidad de comandos (i.e. sleep 1 |while)
BASH:
CSH:
espera por un «do ... done»
error en while y se procesa ¿sleep |?
Espupideces varias sin nombre científico ;-)
% kill -1 ‘cat foo‘
ERROR!!!! --> ‘cat foo‘: Ambiguous.
% /bin/kill -1 ‘cat foo‘
¡¡¡¡¿¿¿¿¿OK?????!!!!
¿Para qué programar en Shell?
Nosayuda en nuestra vida diaria :-)
Evitar la repetición sistemática de comandos
Personalizar utilidades
Por pura comodidad
Crear utilidades automáticas que hagan labores de mantenimiento o instalación
Autodetección de hardware
Para trastear un poco
Meterse con los que usan Perl para hacer trivialidades ;-)
Juegos para BOFHs (expulsar usuarios...)
Sentencias y comandos
Ejecutarcomandos
Llamada directa al ejecutable (/bin/ls o ls si está en el PATH)
Usando un alias
(alias ll=’ls -l’)
Mediante una variables
(LS=/bin/ls; $LS)
Separar comandos
Cada línea un comando
En la misma línea separado por punto y coma (;)
Comandos y expresiones
Listas de comandos
En el propio entorno shell: { comando1; comando2; ...; comando n }
En un subshell: ( comando1;comando2; ...; comando n )
Expresiones Aritméticas
(( expresión ))
variable=$(( expresión ))
variable=$[ expresión ]
(¡NO!)
Expresiones Condicionales
[[ expresión ]]
[ expresión ]
test expresión
«Builtins» versus Comandos
Diferencias:
Comandos son ejecutables independientes del shell
Builtins con funciones propias de shell
Builtins:
[[ ]]
Evalúa expresiones
(( ))Evaluación aritmética
:
. Sentencia vacía
Lee y ejecuta ficheros
Expresiones Aritméticas (I)
var++ var-Post-incremento y post-decremento
++var --var
Pre-incremento y pre-decremento
-+
Signos negativos y positivos
!~
**
Negación lógica y bit a bit
Exponenciación
*/%
Producto, división y módulo
+Suma y resta aritmética
Expresiones Aritméticas (II)
>
Desplazamientode bits
= < >
Comparaciones lógicas
== !=
Igualdad y no igualdad
&
Y binario (AND)
^
O-Exclusivo binario (XOR)
|
O binario (OR)
&&
Y Lógico
Expresiones Aritméticas (y III)
||
O Lógico
?:
Evaluación condicional («si en línea»)
= *= /= %= += -= = &= ^= |=
, Asignación
Separador de sentencias
[base#]n
Indicador de base numérica
i.e: 16#f --> 15
0xn,...
Regístrate para leer el documento completo.