Shell Scripting - Introduccin
El shell interactivo
El shell es un ambiente de programacin capaz de automatizar casi cualquier cosa en su sistema Linux.
Una vez iniciado presenta un prompt ($ #) para indicar que est listo para recibir instrucciones por la entrada estndar (usualmente el teclado).
El shell de uso ms comn en Linux es bash, pero existen otros.
El shell puede ser cualquier aplicacin de usuario.
Que nos ofrece el shell?
El shell provee:
Una interfase interactiva textual al sistema operativo.
Un ambiente operacional.
Facilidades para iniciar y administrar comandos y programas.
Un lenguaje de programacin.
#!/bin/bash clear echo Hola Mundo
Un script muy sencillo...
#!/bin/bash clear SALUDO="Hola Mundo" echo $SALUDO
... lo complicamos con variables
Variables
De ambiente: Variables globales. Son pasadas a todos los procesos iniciados por el shell, incluyendo otros shells. Esto significa que los procesos hijo heredan el ambiente. Por convencin se expresan en maysculas.
De shell: Son variables locales. So especficas al shell corriente y no son heredadas por procesos hijo. En bash, las variables de shell pasan a ser de ambiente cuando son exportadas.
Variables de ambiente
Muchas de las variables son necesarias para la ejecucin de programas.
Para que esas variables esten disponibles deben ser exportadas para convertirlas en variables de ambiente.
$ export MIVARPara listar las variables de ambiente:
$ env
Un poquito mas complicado ...
#!/bin/bash HOLA=Hola function hola { local HOLA=Mundo echo $HOLA }echo $HOLA hola echo $HOLA
Ahora con sustitucin de comandos.
#!/bin/bash HOLA="Hola, hoy es el da $(date +%j) del ao."echo $HOLA
Estructuras condicionales if .. then
#!/bin/bash ...if [ !$# ]; thenecho Hay parametros fi...
Condicional if .. then .. else
#!/bin/bash ...if [ $(whoami) = root ]; then return 0 else return 1fi...
Condicional if .. then .. elif
#!/bin/bash ...if [ $USER = root ]; then echo El usuario es root elif [ $(whoami) = gallego ]; then echo El usuario es El G@llego else echo Vos quien sos? fi...
Ahora un ejemplo con argumentos.
#!/bin/bash FILE= $1 if [ -f $FILE ]; then echo el archivo $FILE existe else echo archivo no encontrado fi
Ciclos: for, while y until
El for es distinto a los de otros lenguajes de programacin. Bsicamente, le permite iterar sobre una serie de `palabras' contenidas dentro de una cadena.
El while ejecuta un trozo de cdigo si la expresin de control es verdadera, y termina cuando es falsa (o se encuentra una interrupcin explcita dentro del cdigo en ejecucin).
El until es casi idntico al while, excepto en que el cdigo se ejecuta mientras la expresin de control se evale como falsa.
Ejemplo de for...
#!/bin/bash for i in $( ls ); do echo item: $i done
Ejemplo de while...
#!/bin/bash CONTADOR=0 while [ $CONTADOR -lt 10 ]; doecho El contador es $CONTADOR let CONTADOR=CONTADOR+1 done
Ejemplo de until...
#!/bin/bash CONTADOR=20 until [ $CONTADOR -lt 10 ]; doecho CONTADOR $CONTADOR let CONTADOR-=1 done
La instruccin case...
case $USER; in root) echo Usuario es root;; gallego) echo Usuario es el G@llego;; *) echo Y este quien es?;; esac
Un pequeo ejemplo.
case "$1"; in *start) ;; *) gprintf "Usage: %s\n" "$(basename $0) {start}" exit 1 ;; esac
Ingresando informacin...
#!/bin/bash echo Por favor, introduzca su nombre: read NOMBRE echo "Hola $NOMBRE!"
Uso de argumentos...
$0 : Nombre del programa script.
$# : Cantidad de argumentos.
$1..$n : Argumentos segn su posicin en la lnea de comandos.
$@ : Lista de argumentos.
$? : Resultado de la ejecucin del ultimo comando.
$$ : PID del shell actual.
Ejemplo de script con argumentos.
#!/bin/bash if [ $# -ne 1 ]; then echo uso: $0 archivo exit 1 elif [ -f $1 ]; then echo el archivo $1 existe else echo archivo no encontrado fi
Operadores de cadenas de texto
[ s1 = s2 ]: s1 coincide con s2
[ s1 != s2 ]: s1 no coincide con s2
[ s1 < s2 ]: s1 es alfabticamente anterior a s2, con el locale actual
[ s1 > s2 ]: s1 es alfabticamente posterior a s2, con el locale actual
[ -n s1 ]: s1 no es nulo (contiene uno o ms caracteres)
[ -z s1 ] : s1 es nulo
Operadores aritmeticos
+ (adicin)
- (sustraccin)
* (producto)
/ (divisin)
% (mdulo)
** (exponenciacin)
Operadores relacionales aritmeticos
[ a -lt b ] equivale a ((a < b))
[a -gt b ] equivale a ((a > b))
[a -le b ] equivale a ((a = b))
[a -eq b ] equivale a ((a == b))
[a -ne b ] equivale a ((a != b))
Operadores lgicos
&& Y lgico (AND)
|| O lgico (OR)
Operadores sobre archivos
d archivo: Verdadero si archivo existe y es un directorio
e archivo: Verdadero si archivo existe
f archivo: Verdadero si archivo existe y es un archivo comn
L archivo: Verdadero si archivo existe y es un enlace simblico
r archivo: Verdadero si archivo existe y puede leerse
s archivo: Verdadero si archivo existe y tiene tamao mayor que 0
w archivo: Verdadero si archivo existe y es escribible
x archivo: Verdadero si archivo existe y es ejecutable
arch1 -ot arch2: Verdadero si arch1 es ms viejo que arch2
Algunos ejemplos prcticos
Confeccin de Manual
Usuario que usa ms espacio en disco
Archivos con bit SUID
Para ampliar estos temas
Bash Guide for Begginers - Matchtelt Garrelshttp://www.tldp.org/LDP/Bash-Beginners-Guide/html/index.html
Visiten el Proyecto de Documentacin de Linuxhttp://www.tldp.org
Top Related