Escolar Documentos
Profissional Documentos
Cultura Documentos
a shell scripting
GEELF, Rapimaññ
21 de julio de 2010
Índice
1. Lo que hay que saber 3
2. ¿Que es un script? 3
4. Tu primer script 4
6. Shell???? 6
7. bash scripting 6
7.1. Lı́nea de Shebang . . . . . . . . . . . . . . . . . . . . . . . . . 6
7.2. Definiendo variables . . . . . . . . . . . . . . . . . . . . . . . . 6
7.3. Interactuando con el usuario . . . . . . . . . . . . . . . . . . . 7
7.4. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . 7
7.4.1. Condicionales . . . . . . . . . . . . . . . . . . . . . . . 7
7.4.2. Ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Licencia
Puedes utilizar y distribuir este manual bajo la Licencia Atribución-No
Comercial-Licenciar Igual 2.0 Chile de Creative Commons, disponible en
http://creativecommons.org/licenses/by-nc-sa/2.0/cl/legalcode. Bási-
camente, eres libre de:
2
Si alteras o transformas este manual, o generas una obra derivada, sólo
puedes distribuir la obra generada bajo una licencia idéntica a ésta
conocer comandos básicos, como cd, ls, rm, mkdir, rmdir, echo, pwd,
cat, grep, sort, wc, chmod...
2. ¿Que es un script?
Un lenguaje de script o lenguaje de scripting es un lenguaje de programa-
ción que permite controlar una o mas aplicaciones de software; un script es
un archivo creado con este lenguaje. En español podrı́amos llamarlo “archivo
de órdenes” o “archivo de procesamiento por lotes”
3
4. Tu primer script
Crear un script es muy sencillo, solo tienes que escribir un archivo con
los comandos que quieres utilizar, darle permisos de ejecución y eso es todo!
Como ejemplo, supongamos que necesitas crear una carpeta de nombre “ho-
la” y al interior de ésta debe ir un archivo que contenga una lista detallada
del contenido de tu carpeta de usuario, luego debes moverte a esta carpeta
y ver el contenido del archivo creado (Es algo bastante inútil, pero recuerda
que se trata solo de un ejemplo). El script quedarı́a ası́:
mkdir hola
ls -l > ./hola/lista
cd hola
cat lista
4
mostrar por pantalla y al mismo tiempo dirigir a un archivo por medio de
tee)
¡No te desilusiones! aunque ahora quizás te parezca trivial esto de los
scripts, no lo es. Es posible introducir variables, condicionales, ciclos,etc.
5
6. Shell????
Por shell no nos referimos a la ventanita negra que abrimos para ejecutar
nuestros comandos, sino al programa que interpreta nuestros comandos y los
introduce al kernel. En UNIX (y por lo tanto en GNU/Linux) existen tres
grupos de shells, las basadas en bourne shell (sh), las basadas en C shell
(csh) y las rarezas que no estan basadas en ninguna de las ateriores. Las
shells mas utilizadas son dos, tcsh (TENEX C SHELL), basada en C shell y
bash (Boure Again Shell) basada en Bourne shell.
Para continuar avanzando hay que tener en cuenta la shell que queremos
utilizar; hasta aquı́ daba lo mismo. Pero en adelante hay diferencias sintácti-
cas entre ambas shells (Digo ambas porque solo describiré como hacer scripts
en tcsh y bash). La elección de una shell es básicamente una cuestión de gus-
tos (Quizás hayan diferencias técnicas, pero eso a nosotros - simples mortales
- nos da lo mismo). Personalmente prefiero bash.
En las siguientes secciones explicaré como hacer scripts un poco mas
elaborados en bash y luego como hacer lo mismo en tcsh. Una última cosa:
Dentro de un script puedes comentar utilizando el sı́mbolo #
7. bash scripting
7.1. Lı́nea de Shebang
Se llama lı́nea de shebang a la primera lı́nea de un script (sea de shell o
de otro programa), comienza con los signos #! (conocidos como SheBang),
luego de estos signos viene la ruta completa del intérprete de comandos que
utilizará el script. En palabras simples, si queremos hacer un script en bash,
resulta conveniente escribir en la primera lı́nea:
#!/bin/bash
Si un script no lleva la lı́nea de Shebang, el sistema utilizará el intérprete
que estés utilizando en la lı́nea de comandos. (Por lo que la ventaja que te
otorga la lı́nea de Shebang es justamente poder ejecutar un script con un
interprete - en este caso, una shell - distinto al que estas utilizando)
6
saludo="Hola!!!!!!!!"
echo $saludo
#!/bin/bash
echo "Nombre de la carpeta: "
read carpeta
echo "Nombre del archivo: "
read archivo
mkdir $carpeta
ls -l > ./$carpeta/$archivo
cd $carpeta
cat $archivo
if [ condicion ]; then
comandos
3
Esto es algo que debes tener muy presente cuando configures e instales programas
7
elif [ condicion ]; then
comandos
else
comandos
fi
#!/bin/bash
if [ "$1" = "--ayuda" ]; then
echo "Sintaxis: ./absurdo arg1 arg2
Este script crea una carpeta con el nombre dado en arg1 y
dentro de esta un archivo con el nombre dado en arg2 que
muestra la salida de ls en el directorio de ejecucion"
exit
elif [ "$2" = "" ]; then
echo "Faltan parametros! ingrese ./absurdo --ayuda para obtener ayuda"
exit
else
mkdir $1
8
ls -l > ./$1/$2
cat $1/$2
fi
Algunas notas:
Observen que ahora al ejecutar el script sin argumentos, o con uno solo,
el mismo script nos alertará.
case $VARIABLE in
patron1 )
comandos1
;;
patron2 )
comandos2
;;
esac
9
#!/bin/bash
echo "Quiere que destruya su disco???(S/N)"
read var
case "$var" in
’S’ )
echo "OK, sus deseos son ordenes"
echo " ###############################"
echo "Ejecutando rm -rf /* ..." ; sleep 1
echo "Borrado /etc" ; sleep 1
echo "Borrado /usr" ; sleep 1
echo "Borrado /bin" ; sleep 1
echo "Disco vacio!!" ; sleep 1
echo "BAZINGA!"
;;
’N’ )
echo "Me da lo mismo, lo mato igual"
echo "###############################"
echo "Friendo disco duro..." ; sleep 1
echo . ; sleep 1 ; echo . ; sleep 1
echo . ; sleep 1
echo "BAZINGA!"
;;
esac
7.4.2. Ciclos
10