lunes, 1 de abril de 2013

El intérprete de órdenes IV


Un repaso de metacaracteres:

|  = Caño, donde se dirige la salida estándar del primar comando a la entrada estándar del segundo.
|| = OR, si el primer comando falla se tomará el segundo.
|= = OR IS (es usado dentro del control de flujo if.. then ... fi)
&& = AND, si el primer comando se ejecuta correctamente se ejecuta el segundo.
!  = NOT (es usado dentro del control de flujo if.. then ... fi), pero como comando del shell este abre un subshell para ejecutar un comando, por ejemplo `! ls ..`
!= = NOT IS (es usado dentro del control de flujo if.. then ... fi)
!$ = último argumento del último comando
!! = repite el último comando
=  = IS (es usado dentro del control de flujo if.. then ... fi)
;  = separa dos comando consecutivos
;; = terminador de la función case...
$  = prefijo de variable del shell por ejemplo "$PATH"
$$ = PID del proceso actual
$0 = Muestra el nombre del proceso actual.
$1 = Primer argumento ingresado.
$2 = Segundo argumento ingresado
$# = Muestra el número de argumentos ingresados.
$? = Cualquier argumento (es usado dentro del control de flujo if.. then ... fi)
$_ = último argumento/comando
$* = Todos los argumentos
$@ = Todos los argumentos
#  = comentario (no se interpreta)
#! = indica que intérprete usar
{  = inicio de definición de función
}  = cierre de función
[  = comienzo de múltiples argumentos
]  = fin de anterior
@  = $@ es equivalente a  "$1" "$2" etc. (todos los argumentos)
*  = caracter comodín (* pude sustituir cualquier número de caracteres)
?  = caracter comodín (? puede sustituir un solo caracter)
"  = comillas
'  = apostrofe exacto.
`  = apostrofe de comando. (variable=`ls -la` hace que $variable adquiera como valores el directorio actual)
.  = lea y ejecute comandos desde un archivo, ( . .bashrc )
&  = ejecute un programa en segundo plano (./program &)
0> = redirección de entrada estándar
1> = redirección de salida estándar
2> = redirección de error estándar
%  = caracter de taréa, %1 = tarea 1 a segundo plano, %2 = tarea 2 a segundo plano , etc.
>> = redirección de salida estándar sin sobre impresión
<< = redirección de entrada estándar. (cat > file << EOF ; cualquier cosa ; EOF)
>  = redirección implícita de salida estándar  (en la sentencia de control "if" se usa para comparaciones
\  = back-slash, elimina la interpretación de meta caracter, por ejemplo \$var no será tratado como una variable.
>& = redireccionador múltiple, ie. echo "a" 1>/dev/null 2>&1 redireciona  2> al mismo lugar que 1>

Esta es la estructura estándar del árbol archivos

/ (root)
 _______________________________|____________________________________
 |    |    | |     |    |    |      |   |  |    |    |
bin/ boot/ dev/ etc/ home/ lib/ lost+found/ proc/ root/ sbin/ usr/ var/
 |    |     |    |     |    |       |         |    |      |    |    |
 |    |     |    |     |    |       |         |    |      |    |    |-> Varios
 |    |     |    |     |    |       |         |    |      |    |
 |    |     |    |     |    |       |         |    |      |    |-> Espacio de usuarios.
 |    |     |    |     |    |       |         |    |      |  
 |    |     |    |     |    |       |         |    |      |-> Binarios del administrador
 |    |     |    |     |    |       |         |    |
 |    |     |    |     |    |       |         |    |-> Directorio del administrador
 |    |     |    |     |    |       |         |  
 |    |     |    |     |    |       |         |-> sistema de archivos de procesos
 |    |     |    |     |    |       |        
 |    |     |    |     |    |       |-> archivos huérfanos
 |    |     |    |     |    |      
 |    |     |    |     |    |-> bibliotecas del sistema
 |    |     |    |     |  
 |    |     |    |     |-> Directorios de usuarios
 |    |     |    |
 |    |     |    |-> Archivos de configuración
 |    |     |
 |    |     |-> Dispositivos
 |    |
 |    |-> Sector de booteo del kernel
 |
 |-> archivos con permiso de ejecución a todos.


Ahora nos abocaremos a la creación de shell script

Un script de ejemplo podría ser este:

#!/bin/bash
echo -n "contraseña: "
read contra
echo "Su contraseña es $contra"

que con cualquier editor de textos puede ser guardado como "miguion.sh", luego por medio de "chmod u+x miguion.sh" le damos permisos de ejecución... el resultado es:

hcaste@azul:~/tmp$ sh miguion.sh
contraseña: 3456
Su contraseña es 3456

la primera línea indicamos que el intérprete será el bash.

bash soporta aritmética entera, por ejemplo:

hcaste@azul:~/tmp$ echo $[ 4 * 2 ]
8

hcaste@azul:~/tmp$ echo $(( 10 + 5 ))
15

COOL! no?

Este es un ejemplo de la sentencia de control "if" que se finaliza con "fi", chistes del señor BASH.

#!/bin/bash

echo -n "entre un nombre: "
read var1
echo -n "otro : "
read var2

if [ "$var1" = "$var2" ]; then
echo "los nombres son los mismos"
else
echo "los nombres no son los mismos"
fi

exit 0

Cabe observar que el formato de la sentencia de control es "if ... ; then ...; else...; fi"

La próxima entrega más sentencia de control.