Sie sind auf Seite 1von 22

PROGRAMACIN SHELL SCRIPT

INTRODUCCIN

EL SHELL ES UN PROGRAMA DESARROLLADO PARA INTERPRETAR COMANDOS PERTENECIENTES A LOS SISTEMAS UNIX Y LINUX.
EL MISMO ES REGULADO POR ESTANDARES CREADOS POR LA IIEE BASADOS EN LA VERSION ORIGINAL ESCRITA POR STEPHEN BOURNE Y SUS EVOLUCIONES MS RECIENTES. LA VERSION ACTUAL DE DICHO ESTANDAR LLAMADA POSIX (PORTABLE OPERATING SYSTEM UNIX) SE ENCUENTRA ACTUALMENTE EN LA VERSION Std 1003.1-2008. SHELL PERMITE EL USO DE SENTENCIAS BSICAS DE PROGRAMACIN ENTRE LAS QUE SE ENCUENTRAN:
CREACION DE RUTINAS ALMACENAMIENTO DE VARIABLES ESTRUCTURAS CONDICIONALES BUCLES FUNCIONES OPERADORES DE COMPARACIN ARITMETICA BASICA LLAMADO ENTRE SCRIPTS ETC

AMPLIADO POR TODOS LOS COMANDOS QUE POSEAN LA CAPACIDAD DE EJECUTARSE EN EL SHELL. EL CONJUNTO DE SENTENCIAS ORDENEES Y RUTINAS CREADAS EN UN ARCHIVO EJECUTABLE POR EL SHELL ES A LO QUE LE LLAMAREMOS SCRIPT. SU USO CORRECTO NOS PERMITIR CREAR SUBPROGRAMAS ADECUADOS A NUESTRA NECESIDAD, MEJORAR LA VELOCIDAD DE ADMINISTRACION DEL SISTEMA Y EXPANDIR LAS CAPACIDADES DE OTROS

TIPOS DE SHELL
EXISTEN DIVERSOS TIPOS DE SHELL ENTRE LOS QUE SE ENCUENTRAN:

Bourne Shell (sh) La ms antigua que se mejor con los aos. Almguist Shell (ash) -- Se escribi como reemplazo de la shell Bourne con licencia BSD; la sh de F FreeBsd, NetBsd(y sus derivados) basados en ash . Bourne-Again shell (bash) -- Se escribi como parte del proyecto GNU para proveerlo de un superconjunto de funcionalidad con la shell Bourne. Debian Almquist shell (dash) -- Dash es un reemplazo moderno de ash en Debian. Korn shell (ksh) -- Escrita por David Korn, miestras estuvo en Bell Labs. Z shell(zsh) -- Considerada como la ms completa: es lo ms cercano que existe en abarcar un superconjunto de sh, ash, bash, csh, ksh, and tcsh.
EN NUESTRO CURSO NOS CENTRAREMOS EN EL SHELL BASH.

RESTRICCIONES A TENER EN CUENTA


RESPETAR SIEMPRE EL USO DE ESPACIOS , CORCHETES ,-, PARENTESIS (CURVOS ()/ RECTOS*+), LINEAS, PIPES ||, SENTENCIAS, DEFINICION DE VARIABLES Y FUNCIONES, PARAMETROS Y SIMBOLOS CON NECESIDAD DE ESCAPE . IDENTAR EL CODIGO LO MEJOR POSIBLE PARA FACILITAR SU LECTURA Y POSTERIOR ANALISIS DE ERRORES. NO ABUSAR EN EL USO DE BUCLES Y DISTIBUIR LOS METODOS LO MEJOR POSIBLE. UTILIZAR PARAMETROS PARA ENVIAR VALORES. INTENTAR SIEMPRE MANTENER LA SEGURIDAD DEL SISTEMA, MANTENIENDO LOS PERMISOS Y SOLO HACIENDO USO DE ROOT CUANDO ES NECESARIO. RESPETAR LA ESTRUCTURAS DE ARCHIVOS ENMARCADA EN EL ESTANDAR (FHS). BASARSE EN EL ESTANDAR POSIX PARA MEJORAR LA PROGRAMACIN. NUNCA ALMACENAR INFORMACIN PRIVADA DE USUARIO O EL SISTEMA COMO SON: CONTRASEAS, NUMEROS DE TARJETA DE CREDITO E INFORMACION SENCIBLE A HACK.

COMENZAR SCRIPT
PARA PODER COMENZAR A PROGRAMAR UN SCRIPT BASH DEBEMOS ELEGIR ENTRE ALGUNO DE LOS EDITORES DISPONIBLES DENTRO DEL SISTEMA. EN ESTE CURSO UTILIZAREMOS EL EDITOR VI O EL EDITO NANO. TODO ARCHIVO DEBER CONTENER EL COMENTARIO AL INICIO #!/bin/bash QUE INDICARA EL TIPO DE SHELL QUE SER USADO PARA SU EJECUCIN. CADA INSTRUCCIN ES INTERPRETADA POR LINEA O POR SEPARACION ; EL MISMO DEBE TENER UN NOMBRE ASOCIADO A LA FUNCION DEL SCRIPT. TENER PERMISOS DE EJECUCIN (X) PARA LOS MIEMBROS DEL GRUPO Y USUARIO. PUEDE SER EJECUTADO MEDIANTE nombre_script./ O bash nombre_script

COMENTARIOS
RECORDAR QUE CADA LINEA O SEPARACION ; ES EJECUTADA COMO UNA INSTRUCCIN.

Dentro de una linea:


Mediante el smbolo # todo texto que se encuentre despus del mismo. Ejemplo: #!/bin/bash nombre=Juan #Qued definida la variable nombre Esto es un comentario la variable fue cargada.

Multiples Lineas:
Mediante las marcas <<NOMBRECOMENTARIO LINEA LINEA LINEA NOMBRECOMENTARIO Todas las lineas encerradas entre las marcas sern un comentario. Ejemplo: #!/bin/bash <<COMENTADO nombre=Juan echo Todo esto esta comentado por $nombre y nada se ejecuta , la variable no fue cargada echo Es un comentario de multiples lineas COMENTADO

SALIDAS POR PANTALLA (echo)


PARA QUE TODAS LAS SALIDAS POR PANTALLA SEAN INTERPRETADAS CORRECTAMENTE POR EL INTERPRETE, ES RECOMENDABLE QUE TODO TEXTO CONTENGA LOS ESCAPES NECESARIOS Y SE ENCUENTRE EN LO POSIBLE ENCOMILLADO POR () O ().

($ echo) El comando echo es el ms usado para desplegar salidas por pantalla, escribir sobre archivos y cumplir con otras tantas funciones.

Su sintaxis es la siguiente: echo [opcin+.. *cadena] Toda cadena puede o no ser escrita entre comillas aunque es recomendable hacerlo para evitar errores de sintaxis y ejecuciones de comandos erroneas. Si no se coloca ninguna opcin la salida por pantalla no interpretar ningn caracter de escape y mostrar todo lo que se encuentre dentro del parametro [cadena].

LAS OPCIONES QUE CONTIENE EL COMANDO echo SON LAS SIGUIENTES: [-n] Evita el salto de lnea.

SALIDAS POR PANTALLA (echo)

Por Ejemplo: $ echo -n Esta es la primer cadena; echo Esta es la segunda Esta es la primera cadena Esta es la segunda

[-e] / [-E] Interpreta o no los caracteres escapados por una contrabarra.


Los caracteres pueden ser:
\ a alerta (campana) \ b backspace \c suprime de nueva lnea \ e de escape \ f forma de alimentacin \ n nueva lnea \ r retorno de carro \ t horizontal tab \ v vertical de la ficha \ \ Barra invertida

Por Ejemplo: echo -e "\tTexto tabulado \n Texto en nueva linea";echo -e Hola \rRetorno del ca rro";
Texto tabulado Texto en nueva linea Retorno del carro

SALIDAS POR PANTALLA (printf)


El comando printf es muy usado en el lenguaje de programacin C, el mismo permite hacer salidas por pantalla y su funcionamiento depende de la estructura de la cadena.

Su sintaxis es la siguiente: $ printf formato [cadena]

Toda cadena puede o no ser escrita entre comillas aunque es recomendable hacerlo para evitar errores de sintaxis y ejecuciones de comandos erroneas. A diferencia de echo el comando printf siempre interpreta el formato del texto,no pudiendo escapar entre las opciones de formato que se encuentran en el mismo.

Sin embargo todas las opciones de formato que se pueden aplicar al texto pueden ser usadas dentro de las cadenas del comando echo opcion -e interpretar.

SALIDAS POR PANTALLA (printf)


Las opciones de formato que se pueden aplicar a las cadenas son las siguientes.
\ "comillas dobles carcter \ 0nnn con valor octal NNN (de 0 a 3 dgitos) \ \ barra invertida \ a alert (BEL) \ b retroceso \ c no produce ms la salida \ f avance de pgina \ n nueva lnea \ r retorno de carro \ t tabulacin horizontal \ v pestaa vertical \ byte xnnn con valor hexadecimal NNN (1 a 3 dgitos) \ uNNNN carcter con valor hexadecimal NNNN (4 dgitos) \ carcter UNNNNNNNN con valor hexadecimal NNNNNNNN (8 dgitos) %Wd Integer `W' digits wide xxxx %W.De Expresa en notacin cientifica x.xxxx e nnn. float, double %W.Df Formato Mejorado xx.xxxx. float, double %W.Dg Variable `W' digits wide,`D' decimals xxxx.xx %q Ejecuta la salida correspondiente al argumetno en un formato que pueda ser reusado por el shell. %s Character string char

SALIDAS POR PANTALLA (printf)


Cuando se ejecuta el comando printf sin ninguna opcin de formato, el texto es desplegado por pantalla en la lnea siguiente pero a diferencia de echo no sale de la misma, quedando el cursor despus del texto de la cadena. Esto es muy til cuando necesitamos desplegar un texto para la toma de decisiones de un men. Ejemplo 1: ~ # printf "Hola \nComo \nAndas\"
Hola Como Andas ~#

Como se puede ver en el ejemplo se utilizo la opcin de formato \n para poder ejecutar cada una de las palabras dentro de una nueva lnea y todo el texto esta encomillado, el cursor quedo dentro del ultimo texto desplegado por printf. Ejemplo 2:
~ # printf Hola \nComo \nAndas\ nhola ~# En este ejemplo no se usaron las comillas y la salida fue una mala interpretacion de lo que quisimos escribir.

VARIABLES (INTRODUCCIN)
UNA VARIABLE ES UN ESPACIO EN MEMORIA RESERVADO PARA ALMACENAR UN VALOR. EN ALGUNOS LENGUAJES DE PROGRAMACIN LAS VARIABLES DEBERAN CONTENER UN IDENTIFICADOR Y UN TIPO ASOCIADO. EN EL CASO DE BASH LAS VARIABLES NO NECESITAN LA INFORMACIN DEL TIPO DE VARIABLE QUE SER ALMACENADA, ESTO SE DEBE A QUE BASH DETERMINA EN TIEMPO DE EJECUCIN EL TIPO DE VARIABLE POR SU CONTENIDO. POR LO QUE SE SIMPLIFICA LA DEFINICIN DE VARIABLES PERO SE DIFICULTA LA REVISIN DE LOS ERRORES EN SCRIPTS.

SE DEBE SER CAUTELOSO EN LA DEFINICIN DE VARIABLES Y SIEMPRE PRESERVAR LOS TIPOS QUE ESTAMOS USANDO, TENIENDO CUIDADO EN LAS VARIACIONES QUE LAS MISMAS PUEDEN TENER EN EL TRANSCURSO DEL SCRIPT.
EN UNIX Y LINUX EXISTEN UNA CANTIDAD SIGNIFICATIVA DE VARIABLES YA DEFINIDAS ENTRE LAS QUE ENCONTRAMOS: VARIABLES DE ENTORNO, VARIABLES DEL SISTEMA Y VARIABLES LOCALES. TODAS ELLAS PUEDEN SER LLAMADAS PARA OBTENER SU VALOR Y SER MODIFICAS MEDIANTE EL INTERPRETE. PARA OBTENER UNA LISTA DE TODAS LAS VARIABLES DE ENTORNO SE PODEMOS UTILIZAR LOS COMANDOS: set,env

VARIABLES (DEFINICIN)
PARA DEFINIR UNA VARIABLE EN BASH SIMPLEMENTE SE DEBE COLOCAR SU NOMBRE CONTINUANDO CON UN SIGNO DE IGUAL = Y SU VALOR CORRESPONDIENTE.
nombre_variable=valor EXISTEN LAS SIGUIENTES RESTRICCIONES A TENER EN CUENTA EN LOS NOMBRES DE LAS VARIABLES: No pueden existir nombres de variables con numeros al principio ya que los mismos estn reservados para se utilizados como (file descriptors) por el shell. No puede contener caracteres como (!,*,-) ya que shell los utiliza como substitucion de nombres de archivo. Cuando se asigna un valor del tipo String, se debe tener sumo cuidado con el uso de espacios y encomillando el valor en el caso de su uso. A este tipo de variables simple se les llama escalares. Ejemplos de nombres de variables pueden ser:

_NOMBRE _2opcion opcionN2 etc.

VARIABLES (ACCESO)
Para acceder al valor almacenado en una variable es suficiente con colocar un signo de $ antes del nombre de la misma.

$nombre
Con el valor resultante se pueden efectuar todo tipo de operaciones, desde el asignamiento a otra variable hasta comparaciones de cadenas de texto, bucles, operaciones aritmeticas y usarse como parametros de comandos. Veamos el primer ejemplo de un Script que carga una variable y la despliega por pantalla.

#!/bin/bash #Se define la variable mensaje con el valor Hola Pepe mensaje=Hola Pepe #Se accede a la variable mensaje y se pasa como parametro al comando echo. echo $mensaje

VARIABLES (ARITMTICA BSICA)

PARA PODER DEFINIR EXPRESIONES ARITMETICAS EN VARIOS SHELL ANTIGUOS, ES NECESARIO UTILIZAR EL COMANDO expr QUE VEREMOS MS ADELANTE. EN BASH Y OTRO SHELLS MODERNOS ES POSIBLE DEFINIR EXPRESIONES ARITMETICAS MEDIANTE EL USO DE PARENTESIS CURVOS (()). SU SINTAXIS PARA LAS EXPRESIONES ES LA SIGUIENTE: $((EXPRESION))

SIENDO EXPRESION CUALQUIER EXPRESION MATEMTICA QUE UTILICE VALORES NUMERICOS Y/U OPERADORES MATEMTICOS ESPECIFICOS. POR EJEMPLO:

SUMA=$((2+2)) RESTA=$((3-2)) MULTIPLICACION=$(($SUMA*$RESTA)) echo El Resultado de la multiplicacin es ----))))$MULTIPLICACION

VARIABLES (ARRAYS)
AL IGUAL QUE EN OTROS LENGUAJES DE PROGRAMACIN EN SHELL TAMBIEN SE PUEDEN DEFINIR ARRAYS PARA ALMACENAR UN CONJUNTO DE VALORES, DICHOS VALORES SON ALMACENADOS MEDIANTE UN INDICE NICO QUE PODR SER DESDE UN INTEGER HASTA UNA PALABRA. LA SINTAXIS MS SENCILLA PARA LA CREACIN DE UN ARRAY ES LA SIGUIENTE:

nombreArray [indice]= valor PARA PODER ACCEDER AL VALOR ALMACENADO DENTRO DE UN ARRAY BASTA SIMPLEMENTE CON ESCRIBIR:

${nombreArray[indice]} RECUERDE SIEMPRE PONER LOS CORCHETES ANTES DE DEFINIR EL ARRAY Y NO COLOCAR NINGUN ESPACIO QUE NO SEA NECESARIO, DE LO CONTRARIO EL SHELL LANZARA EL ERROR CORRESPONDIENTE.

TAMBIN SE PUEDEN RECORRER LO S ARRAY CON ITERACION MEDIANTE BUCLES DE FOR O WHILE ETC.

VARIABLES (SALIDA ESTANDAR)


DENTRO DE LAS VARIABLES TAMBIN SE PUEDE ALMACENAR COMO VALOR LA SALIDA DESPLEGADA POR LA EJECUCIN DE UN COMANDO. PARA LOGRAR ESTO ES NECESARIO COLOCAR EL COMANDO Y SUS OPCIONES DENTRO DEL CARACTER (``), DE ESTA FORMA EL COMANDO SE EJECUTARA Y ALMACENARA SU VALOR DENTRO DE LA VARIABLE DEFINIDA. POR LO TANTO SU SINTAXIS SERA LA SIGUIENTE: nombreVariable=`comando` POSTERIORMENTE PUEDE DESPLEGAR EL VALOR POR PANTALLA O REALIZAR CUALQUIERA DE LAS OPERACIONES DISPONIBLES CON VARIABLES.

VARIABLES (EJEMPLOS BASICOS)


ASIGNAMIENTO ENTRE VARIABLES. #!/bin/bash $nombre=Juan $apellido=Fernandez $nombreYapellido=$nombre $apellido echo $nombreYapellido ALMACENANDO UNA VARIABLE DE ENTORNO EN UNA VARIABLE DEL SCRIPT #!/bin/bash nombreUsuario=$USER mi_shell=$SHELL echo -e Mi nombre de usuario es $nombreUsuario \nMi shell es $mi_shell ALMACENANDO EL VALOR DE UN COMANDO EN UNA VARIABLE #!/bin/bash dia=`date` archivosEnDirectorio=`ls` echo Hoy es el da $dia \nLos Archivos Encontrados fueron $archivosEnDirectorio CREANDO UN ARRAY Y MOSTRANDO LOS VALORES POR PANTALLA arrayNombres[1]="Juan" arrayNombres[2]="Sofia" arrayNombres[3]="Hola"

echo "${arrayNombres[1]}\n${arrayNombres[2]}"

FUNCIONES (INTRODUCCIN)
LAS FUNCIONES SON UTILES PARA ORGANIZAR EL CODIGO, RETORNAR VALORES, TRABAJAR CON PARAMETROS ENTRE OTROS BENEFICIOS. DENTRO DE LAS FUNCIONES SE INCLUYE EL CONJUNTO DE SENTENCIAS NECESARIAS PARA SU POSTERIOR EJECUCION Y/O TOMA DE DESICIONES. EN BASH NO ES NECESARIO COLOCAR EL TIPO DE VALOR QUE SE RETORNAR, POR LO QUE ES NECESARIO MANTENER LA COHERENCIA ENTRE LOS VALORES Y PARAMETROS QUE LA MISMA RECIBE. LA SINTAXIS PARA DEFINIR UNA FUNCION ES LA SIGUIENTE: function nombre_funcion(){ instrucciones .. }

FUNCIONES (PARAMETROS)
LOS PARAMETROS SON VALORES QUE SE PASAN A UN COMANDO, FUNCIN O SCRIPT. DENTRO DE BASH LOS PARAMETROS SON PASADOS MEDIANTE ESPACIOS. POR EJEMPLO CUANDO SE PASA EL PARAMETRO CADENA DENTRO DEL COMANDO echo SE EJECUTA UN ESPACIO ENTRE echo..cadena. DENTRO DE LAS FUNCIONES SE REALIZA DE FORMA SIMILAR ESCRIBIENDO EL NOMBRE DE LA FUNCIN SEGUIDO DEL ESPACIO Y EL VALOR DEL PARAMETRO. A CADA PARAMETRO EL SHELL LE ASIGNA UN IDENTIFICADOR NUMRICO QUE CORRESPONDE AL ESPACIO QUE LO PRECEDE. VEAMOS UN EJEMPLO: #!/bin/bash function pasaMeParametro(){ echo $1 echo $2 } pasaMeParametro Hola Chau pasaMeParametro Hola Chau De esta forma los parametros con el contenido Hola y Chau sern identificados por la funcin y cumplir con las operaciones colocadas dentro de la misma. Si se desea retornar un valor simplemente se coloca la palabra return antes de cerrar los corchetes.

CONTROL DE FLUJO
En Bash existen estas construcciones para controlar el flujo de ejecucion de un script: if/else: Ejecuta una serie de comandos dependiendo si una cierta condicion se cumple o no. for: Ejecuta una serie de comandos un numero determinado de veces. while: Ejecuta una seria de comandos mientras que una determinada condicion sea cumpla. until: Ejecuta una serie de comandos hasta que una determinada condicion se cumpla. case: Ejecuta una o varias listas de comandos dependiendo del valor de una variable. select: Permite seleccionar al usuario una opcion de una lista de opciones en un menu.

if/else
SU ESTRUCTURA EN BASH ES LA SIGUIENTE: if "condicion" then "comandos" [else "comandos"] fi
Por Ejemplo: #!/bin/bash # # Comprobando terminacion de un comando # DIRECTORIO="/tmp/test" COMANDO="/bin/mkdir $DIRECTORIO" if $COMANDO then echo "$DIRECTORIO ha sido creado" else echo "$DIRECTORIO no pudo ser creado" fi

Das könnte Ihnen auch gefallen