2. INTRODUCCIÓN A SCRIPTS
DEL SHELL
El Shell UNIX tiene su propio lenguaje de
programación incorporado, que se utiliza para
crear programas o scripts del Shell.
Escribir
un script de shell es una manera de crear un
comando personalizado que puede realizar una
única tarea o una serie de tareas y puede utilizarse
repetidamente.
3. Losscripts de shell básicos son pequeños archivos
que consisten en varios comandos que muestran
información básica del sistema o manipulan
archivos.
Los scripts más complejos consisten en
variables y comandos de programación
incorporados que incluyen el
comando read para una entrada interactiva,
los condicionales if, test, y case, y comandos de
bucle for, while, y until.
4. CONCEPTOS BASICOS SOBRE
SCRIPTS
LaShell permite al usuario interactuar con el Kernel
a través de la interpretación de los comandos que
el usuario ingresa en la línea de comandos ( ó a
través de los "scripts", archivos que ejecutan un
conjunto de comandos).
Variables
Para utilizar una variable basta con hacer una
asignación como vemos a continuación.
5. variable = “valor”
Esta orden establece un valor en una variable.
Si deseamos mostrar el contenido de una variable
utilizaremos la orden:
echo $variable
Si deseamos introducir un dato a una variable desde el
teclado, utilizamos la orden read seguido de la variable.
read variable.
Si además deseamos introducir un texto antes de leer la
variable usamos read de la siguiente
forma:
read variable? “texto”
6. DESCRIPCIÓN GENERAL DE LOS SCRIPTS DEL
SHELL
Sirven
para evitar tener que recordar la sintaxis de
los comandos, o para poder ejecutar varios
comandos simultáneamente, para lo cual se
puede crear un alias o escribir un script de shell.
Un alias se utiliza normalmente para ejecutar uno o
más comandos separados por punto y coma (;). Un
script de shell es un archivo de texto que contiene
una secuencia de comandos para que el shell
ejecute de a una línea a la vez.
7. Además de los comandos, los scripts de
shell incluyen comentarios. Los
comentarios son texto que se utiliza para
documentar qué hace el script y describir
qué se supone que hagan las líneas
dentro del script cuando éste se ejecuta.
Los comentarios van precedidos por el
simbolo # (numeral).
8. CREACION DE UN SCRIPT DE SHELL SIMPLE
Podemos introducir los siguientes caracteres en ubuntu para poder realizar un
script simple:
1. Abrir un terminal, en ella escribir lo siguiente y presionen [Enter]:
cd $HOME && touch script.sh && chmod +x script.sh
Esto bastará para que se les cree un archivo script.sh en su carpeta personal.
2. En el terminal poner lo siguiente:
cd $HOME && echo '#!/bin/bash' > script.sh && echo
'# -*- ENCODING: UTF-8 -*-' >> script.sh
3. Listo, ya tenemos un script. Si lo abrimos nos quedará algo así:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
9. Después de esa segunda línea, a partir de ahí se escriben las instrucciones.
Por ejemplo, le diremos que nos muestre en una terminal “<° ya se hacer
un script”
Nos quedaría el script de la siguiente forma:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "<° ya se hacer un scrpit"
exit
Para poder ejecutarlo debemos ir hacia la carpeta donde están los scripts,
entonces abrimos un terminal y en este teclemos lo siguinet para
visualizarlo:
cd $HOME
Ahora lo ejecutamos poniendo un punto y un slash (seguidos), y seguido a
esto el nombre del script, o sea:
./script.sh
Y asi obtenemos un script de shell simple en ubuntu.
10. EJEMPLO DE UN SCRIPT SIMPLE
1)Primero abriremos un editor de texto, el cual se
lo localiza tecleando «gedit» en el terminal o en el
ícono de Inicio en Ubuntu. Una vez en el editor
colocaremos los siguientes comandos:
11. 2) Para correr el script, tenemos que abrir un
terminal y primero cambiaremos los permisos de
ejecución, para lo cual colocamos lo siguiente:
El script consiste en un colocar un mensaje en
pantalla, el cual se repita infinitamente.
3) A continuación, nos colocaremos en el Escritorio,
que para nuestro ejemplo es en donde se
encuentra el script.
12. 4) Una vez en el escritorio, llamamos a nuestro
script, de la siguiente manera:
5) Una vez que tenemos nuestro script funcionado,
este es el resultado.
13. EJECUCIÓN DE UN SCRIPT
Existen dos formas de ejecutar un script de shell. El
alumno puede utilizar los
comandos ksh o bash seguidos por el nombre del
archivo script. El alumno también puede hacer el
archivo script de shell ejecutable, luego tipear el
nombre del script para ejecutarlo.
Ejecución de Scripts por medio de ksh o bash.
Si el script no es un archivo ejecutable, puede
ejecutarse iniciando un nuevo programa de shell
seguido del nombre del archivo script como
argumento.
14. Cómo Hacer Ejecutables los Archivos Script.
La otra forma de ejecutar un script es
cambiar sus permisos, de modo tal que al
menos tenga permisos de lectura y
ejecución (chmod 555
nombre_de_archivo). Si el alumno ha de
modificar o hacer debug del script, deberá
también tener permiso de escritura (chmod
755 nombre_de_archivo).
15. CÓMO HACER DEBUGGING DE UN SCRIPT
Un problema común al escribir scripts de shell es
que el shell no interpreta el comando de la
manera en la cual lo espera el usuario.
Se puede utilizar los comandos ksh o bash con las
opciones -x (echo - eco) y -v (verbose -
"elocuente") para ayudar a identificar en qué
parte del script se encuentran los problemas.
16. La opción -x muestra cada línea tras haber sido
identificada por el shell y coloca un signo más (+)
tras haber ejecutado cada línea. Las líneas que se
encuentran debajo de ellas muestran el resultado
de los comandos.
La opción -v es similar a la opción -x excepto en
que muestra los comandos antes de efectuar la
sustitución de las variables y los comandos.
Juntas, las opciones -x y -v nos permite observar
cada línea del archivo script antes y después de
que sean ejecutadas. Esto es de mucha ayuda al
señalar en qué parte del script se encuentra el
problema.
17. DESCRIPCION DE SCRIPTS
AVANZADOS
Para cada shell UNIX existe un lenguaje de
programación completo el cual consiste en
comandos y construcciones que se pueden
utilizar para la creación de scripts más
complejos
Este contiene comandos muy similares a los
de programación que viene incluidos en el
shell tales como son el if, else, read, case,
while, y exit, los scripts complejos van a utilizar
variables predefinidas y otras ya definidas por
el usuario.
18.
19. VARIABLES EN SCRIPTS
Es un tipo de parámetros que corresponden
al concepto clásico de variable que se
encuentran presente en los lenguajes de
programación convencionales, debido a la
relativa simplicidad de ese entorno, su
funcionalidad es reducida. Las variables no
se declaran, creándose cuando se les asigna
un valor usando la construcción
variable=valor, por ejemplo; BACKUPDIR
=/home/user2/myfiles configura la variable
denominada BACKUPDIR (backup directory -
copia de seguridad del directorio).
20. Un aspecto importante relacionado con las variables
es la posible exportación a los procesos creados por
el propio Shell durante la ejecución de los distintos
mandatos. Por defecto la variables no se exportan,
por lo tanto los procesos que fueron creados no
obtienen una copia. Si se requiere que una variable
sea exportada a los proceso hijos del Shell, se lo
debe especificar mediante el comando export.
El Shell durante su fase de arranque crea una
variable por cada una de las definiciones presentes
en el entorno del proceso que ejecuta el shell.
Algunos ejemplos de variables del entorno
predefinidas son:
El shell de login (SHELL)
El nombre de login (LOGNAME)
La ruta de búsqueda que se utiliza para buscar
comandos (PATH)
Las configuraciones de terminal (TERM)
21. PARAMETROS POSICIONALES
Corresponden a los argumentos con los que
se invoca a un script o a una función. Su
identificador en un número que corresponde
con su posición. Por ejemplo, si tenemos $1
nos indica el número del primer argumento,
$2 el del segundo y así sucesivamente, $i se
refiere al i-ésimo argumento.
El usuario no puede modificar de forma
individual un parámetro posicional, pero
puede reasignarlos mediante un comando
llamdo set.
22. PARAMETROS ESPECIALES
Son parámetros mantenidos por el propio
shell por lo que el usuario no puede modificar
su valor. Estos son algunos de los mas usados:
0: Nombre del sript
#: Numero de parámetros posicionales.
: lista de parámetros posicionales.
: valor devuelto por el último mandato
ejecutado.
$: Identificador del proceso del propio Shell.
!: Identificador de proceso asociado al último
mandato en background arrancado.
23. ENTRADA INTERACTIVA
Cuando se invoca como un shell interactivo con el nombre sh,
bash busca la variable ENV, si está definida expande su valor, y
utiliza el valor expandido como el nombre de un archivo para
leer y ejecutar.
Un script es un archivo tipo texto, cuyas líneas tienen comandos
que son ejecutados (interpretados) por bash. Para lograr que el
intérprete de comandos intérprete las líneas de un archivo
puede:
Ejecutar /bin/bash seguido del nombre del archivo (o
redireccionar la entrada estándar para que provenga del
archivo).
Emplear el comando source seguido del nombre del archivo.
Emplear el caracter '.' seguido de un espacio y el nombre del
archivo.
Agregar en la primera línea del archivo la cadena #!/bin/bash,
dar permiso de ejecución al archivo y teclear el nombre del
archivo desde el intérprete de comandos ---como si fuera un
nuevo comando.
24. EL COMANDO TEST
El comando test evalúa una expresión, y si el resultado es
verdadero, devuelve un estado de salida de cero. De otro
modo el resultado es falso, y devuelve un estado de salida que
no es cero.
La expresión compara normalmente dos números o dos
cadenas para comprobar si los valores son idénticos. La
expresión se utiliza también para probar el estado de un
archivo.
Formato del Comando:
if test expresión o if [expresión]
then
ejecutar comando(s)
fi
25. Operadores del Comando Test
Casi todos los scripts de shell avanzados funcionan con archivos. El
comando test permite a los operadores probar el tipo de archivo,
los permisos del archivo y si un archivo contiene o no
determinados datos. La figura presenta una lista de los operadores
de archivos utilizados más comúnmente con test.
26. El signo ! (bang) denega una prueba, de modo que [ ! -w archivo]
denega [ -w archivo]. Por ejemplo, el siguiente script de shell
filetest.sh acepta un nombre de archivo como argumento y luego
lleva a cabo una cierta cantidad de pruebas para determinar los
permisos de los archivos.
$ cat filetest.sh
#!/bin/ksh
if [ ! -f $1 ] #test:Si el primer archivo especificado no existe then echo
mensaje
then
echo "Lo siento, el archivo no existe"
elif [ ! -r $1 ] # test:Si el primer archivo especificado no existe a leido
perms then echo message
then
echo "la carpeta no es leíble"
elif [ ! -w $1 ]
then
echo " la carpeta no es editable "
else
echo " la carpeta es editable y leíble "
fi
27. EL COMANDO IF
La forma más simple de un comando condicional es el
comando if.
El comando if es un comando de shell incorporado que le
permite al alumno probar una condición y luego cambiar
el flujo de la ejecución de un script de shell basándose en
el resultado de la prueba.
Existen tres formatos del comando if. El comando fi (if
invertido) se coloca siempre al final de un condicional if.
El Formato del Comando if-then (si-entonces):
if el comando tiene éxito
then
ejecutar el/los comando(s)
fi
28. El Formato del Comando if-then-else (si-entonces-de lo
contrario):
if el comando tiene éxito
then
ejecutar el/los comando(s)
else
ejecutar el/los comando(s)
fi
El Formato del Comando if-then-elif (else if)(si-entonces-de lo
contrario si):
if el comando tiene éxito
then
ejecutar el/los comando(s)
elif el comando tiene éxito
then
ejecutar el/los comando(s)
else
ejecutar el/los comando(s)
fi
29. Podemos comprobar los valores de terminacion de un comando,
y comparar cadenas alfanumericas/numericas y atributos de
ficheros. Algunos ejemplos para aclararnos las ideas.
1.- Llamamos al interprete de comando de bash
2.- Documentacion
3.- Guardamos
30. 4.- Abrimos el terminal
5.- Cambiamos los permisos con el comando chmod
6.- Ahora pasamos a la respectiva comprobacion
31. EL COMANDO CASE
El comando incorporado al shell case se utiliza
cuando existen muchas condiciones que probar.
Formato del Comando:
La sintaxis de esta construccion es la siguiente:
case expresion in
caso_1 )
comandos;;
caso_2 )
comandos;;
......
esac
32.
33. CONTROL DEL FLUJO
Las expresiones de control de flujo influyen en la forma en que el código es
ejecutado, y dividen el código en bloques. Los bloques empiezan con una
palabra reservada, por ejemplo while y terminan con la palabra reservada
endwhile, formada por el prefijo end y la misma palabra que empezó el
bucle. También es posible acabar un bloque con la palabra end. El código
que se entre dichas palabras se denomina el cuerpo de la expresión de
control.
Las siguientes construcciones son posibles
Sentencia while
La sintaxis es la siguiente
while condicion
do
comandos
done
Las sentencias del cuerpo se ejecutaran mientras condición se siga
evaluando a cierto. Si en el cuerpo no se modifica alguna de las variables
que se evalúan en la condición entraremos en un bucle infinito.
34. Sentencia for
Ejecuta una serie de comandos un numero determinado de
veces
La sintaxis de la sentencia for es muy semejante a la del while.
for nombre [in lista]
do
comandos que pueden utilizar $nombre
Done
En el bucle for se evalúa la expresión una vez al principio y se
asigna a la variable var. Sin embargo la expresión de
asignación del for funciona un poco distinto que en el resto de
los casos. En lugar de asignar la expresión completa, se asigna
sólo una columna y el bucle va iterando en todas las columnas.
Normalmente el bucle for se usa cuando se quieren hacer las
cosas cierto número de veces (tantas como columnas tenga el
resultado de evaluar la expresión).
35. Sentencia Until
Funciona exactamente igual al while, sin embargo al
revés, es decir, es losiguiente: ambos verifican
comandos; ambos poseen la misma sintaxis y
ambosactuan en ciclo, sin embargo, mientras el while
ejecuta el bloque deinstrucciones del ciclo mientras un
comando este bien ejecutado, el until ejecuta el bloque
del ciclo hasta que el comando este bien ejecutado. En
otraspalabras se podria decir que en el while el comando
tiene que ser verdadero para que el ciclo se realice, y en
el until, el comando tiene que ser falso. La sintáxis del
comando es practicamente la misma del while.Observa:
until condicion; do
comandos
done