Vous êtes sur la page 1sur 29

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.

Un script muy sencillo...


#!/bin/bash
clear
echoHolaMundo

... lo complicamos con variables


#!/bin/bash
clear
SALUDO="HolaMundo"
echo$SALUDO

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.

$exportMIVAR

Para listar las variables de ambiente:

$env

Un poquito mas complicado ...


#!/bin/bash
HOLA=Hola
functionhola{
localHOLA=Mundo
echo$HOLA
}
echo$HOLA
hola
echo$HOLA

Ahora con sustitucin de


comandos.
#!/bin/bash
HOLA="Hola,hoyeselda$(date+
%j)delao."
echo$HOLA

Estructuras condicionales if ..
then
#!/bin/bash
...
if[!$#];then
echoHayparametros
fi
...

Condicional if .. then .. else


#!/bin/bash
...
if[$(whoami)=root];then
return0
else
return1
fi
...

Condicional if .. then .. elif


#!/bin/bash
...
if[$USER=root];then
echoElusuarioesroot
elif[$(whoami)=gallego];then
echoElusuarioesElG@llego
else
echoVosquiensos?
fi
...

Ahora un ejemplo con


argumentos.
#!/bin/bash
FILE=$1
if[f$FILE];then
echoelarchivo$FILEexiste
else
echoarchivonoencontrado
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
foriin$(ls);do
echoitem:$i
done

Ejemplo de while...
#!/bin/bash
CONTADOR=0
while[$CONTADORlt10];do
echoElcontadores$CONTADOR
letCONTADOR=CONTADOR+1
done

Ejemplo de until...
#!/bin/bash
CONTADOR=20
until[$CONTADORlt10];do
echoCONTADOR$CONTADOR
letCONTADOR=1
done

La instruccin case...
case$USER;in
root)
echoUsuarioesroot;;
gallego)
echoUsuarioeselG@llego;;
*)
echoYestequienes?;;
esac

Un pequeo ejemplo.
case"$1";in
*start)
;;
*)
gprintf"Usage:%s\n""$(basename$0)
{start}"
exit1;;
esac

Ingresando informacin...
#!/bin/bash
echoPorfavor,introduzcasunombre:
readNOMBRE
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[$#ne1];then
echouso:$0archivo
exit1
elif[f$1];then
echoelarchivo$1existe
else
echoarchivonoencontrado
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 -ge 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


darchivo:

Verdadero si archivo existe y es un directorio

earchivo:

Verdadero si archivo existe

farchivo:

Verdadero si archivo existe y es un archivo comn

Larchivo:

Verdadero si archivo existe y es un enlace

simblico
rarchivo:

Verdadero si archivo existe y puede leerse

sarchivo:

Verdadero si archivo existe y tiene tamao mayor

que 0
warchivo:

Verdadero si archivo existe y es escribible

xarchivo:

Verdadero si archivo existe y es ejecutable

arch1otarch2: 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 Garrels


http://www.tldp.org/LDP/Bash-Beginners-Guide/html/index.html

Visiten el Proyecto de Documentacin de Linux


http://www.tldp.org