You are on page 1of 30

1

BASH:
Este libre se distribuye bajo una licencia: Creative Commons Atribucin-No Comercial-Compartir Obras Derivadas Igual 3.0 Usted es libre de: copiar, distribuir, exhibir, y ejecutar la obra hacer obras derivadas

Bajo las siguientes condiciones: Atribucin. Usted debe atribuir la obra en la forma especificada por el autor Dal Mas, Augusto Flix. :D espero que se a dieran algunos mas

No Comercial. Usted no puede usar esta obra con fines comerciales.

Compartir Obras Derivadas Igual. Si usted altera, transforma, o crea sobre esta obra, slo podr distribuir la obra derivada resultante bajo una licencia idntica a sta.
* Ante cualquier re-utilizacin o distribucin, usted debe dejar claro a los otros los trminos de la licencia de esta obra. * Cualquiera de estas condiciones puede dispensarse si usted obtiene permiso del titular de los derechos de autor. * Nada en esta licencia menoscaba o restringe los derechos morales del autor. Cdigo legal: http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode

Contenido
INTRODUCCIN
Qu es Bash y Shell?

INSTALACIN, EJECUCIN Y DEPURACIN


2

Instalacin y Ejecucin de bash Como se ejecuta y empieza un script? Depuracin de un script

SINTAXIS
Parmetros especiales Citando Formas de ejecucin de comandos Formas de direccionamiento de datos (Entrada/Salida). *Re direccin *Re direccin usando descriptores de archivos *Re direccin multiple

VARIABLE
Tipos de variables sobre bash
Operadores de sustitucin y de bsqueda de patrones

EXPRESIN ARITMTICA CONTROL DE FLUJO


Estructura condicional Bucles Sentencias

FUNCIN CONFIGURACIN DE BASH


Ficheros Alias Indicador (Prompt) Opciones

Introduccin

Qu es Bash y Shell? Bash es el shell o intrprete de lenguaje de comando, para el sistema operativo GNU. El nombre es un acrnimo de la "Bourne-Again Shell", un juego de palabras sobre Stephen Bourne, el autor del antepasado directo del actual sh shell de Unix, que apareci en la sptima edicin de Bell Labs Research versin de Unix. Bash es ampliamente compatible con sh e incorpora funciones tiles a partir de la cscara ksh Korn y el shell C csh. Se pretende que sea una aplicacin conforme de la ieee posix Shell y Herramientas de la especificacin IEEE POSIX (estndar IEEE 1003.1). Ofrece mejoras funcionales tanto para sh ms interactivo y el uso de programacin. Si bien el sistema operativo GNU ofrece otros depsitos, entre ellos una versin del csh, Bash es el shell por defecto. Al igual que otros de software GNU, Bash es muy porttil. En la actualidad funciona en casi todas las versiones de Unix y otros sistemas operativos independientemente apoyado por los puertos existentes. 4

Shell es simplemente un procesador de macros que ejecuta los comandos. Un shell de Unix es un intrprete de comandos y un lenguaje de programacin. Como un intrprete de comandos, el shell es la interfaz del usuario proporcionado un gran conjunto de utilidades GNU; un shell permite la ejecucin de comandos gnu, tanto sincrnica y asncronica. El intrprete de comandos espera sincrncamente comandos para completar antes de aceptar ms entradas; asncroncamente sigue para ejecutar comandos en paralelo con el shell mientras se lee y ejecutan comandos adicionales. La re-direccin de flujos permiten un control detallado de la entrada y salida de los comandos. Si bien es esencial la ejecucin de comandos, la mayor parte del potencial (y la complejidad) de los shell's se debe su incorporacin de un lenguaje de programacin. Al igual que cualquier lenguaje de alto nivel, el shell ofrece variables, control de flujo de construcciones, cotizaciones, y funciones. *Para concluir que es shell - script considerado un lenguaje de programacin, en el cual se puede definir como un conjunto de comandos ordenados que son interpretados por el sistema. Carece de un flujo de instrucciones estructurado pero notablemente dotado para la modulacin de cdigo. Imperativo y de propsito general, permite la manipulacin de ciertas caractersticas del sistema operativo haciendo uso del intrprete de comandos como mediador entre el usuario y el sistema operativo.

Instalacin ,ejecucin y depuracin

Instalacin y Ejecucin de bash Existen varias versiones de Bash y no hay ningn requisito de que Bash debe estar presente en cualquier distribucin dado que esta implementado bajo las normas IEEE POSIX. El shell Bash es el software de cdigo abierto publicado bajo la Licencia Pblica GNU (GPL). Si necesita instalar Bash, el lenguaje C, el cdigo fuente est disponible gratuitamente a partir de la Free Software Foundation en http://www.gnu.org a travs de una descarga de sus mirrors. El procedimiento de instalacin de Bash puede variar con el tiempo. Las instrucciones completas se encuentran en el archivo README que acompaa a las fuentes. Sin embargo, la instalacin es en gran medida automatizada .El procedimiento bsico es el siguiente: 1. Ejecute el programa de configuracin para determinar su sistema operativo y verificar la caractersticas necesarias para compilar Bash. ./configure 2. Ejecute make para construir Bash. 3. Ejecute make tests. Pruebas de diagnstico para garantizar Bash fue construido correctamente. 4. Ejecute make install para instalar Bash bajo el directorio /usr/local/subdirectorio. Si su variable PATH est correctamente establecida, puede empezar escribiendo bash Bash en el intrprete de comandos. Si no tiene privilegio de superusuario en el equipo, puede compilar y install Bash en su cuenta personal. Utilice la opcin-prefix a configurar con especificar el directorio para instalar Bash. Por ejemplo,-prefix = $ HOME o -- prefix = $ HOME / bash podran ser buenas opciones. 6

Ejecutar bash El intrprete de comandos de la shell Bash (bash) se puede invocar como sigue: bash [opciones] [argumentos] Bash puede ejecutar comandos desde la terminal, a partir de un archivo. En muchos sistemas, /bin/sh es un enlace al Bash. Cuando se invocan script como *.sh. Opciones Simplemente ejecute bash --help en la terminal o man bash; para salir de man, mantener la tecla Shift y despus la tecla Q Argumentos Argumentos se asignan con el fin de la parmetros $ 1, $ 2, etc Si el primer argumento es un script, los comandos se leen de la misma, y el resto de argumentos son asignados a $ 1, $ 2, etc El nombre de la secuencia de comandos est disponible como $ 0. El archivo de comandos en s no tiene por qu ser ejecutable, pero debe ser legible. Ejecutar un script Estando en el directorio del archivo tenemos dos opciones en la terminal: 1) sh ejemplo.sh 2) chmod +x ejemplo.sh ./ejemplo.sh Empezar un script En la primera lnea del script se debe indicar que shell que vas a usar ( /bin/bash/ , /usr/bin/perl , etc ): #! /usr/bin/perl #!/usr/bin/sh #!/usr/bin/ksh #!/usr/bin/csh #!/usr/bin/bash O O O O O #!bin/perl #!/bin/sh #!/bin/ksh #!/bin/csh #!/bin/bash Declaras Perl Shell Declaras en Bourne shell Declaras en Korn shell Declaras en C shell Declaras en Bourne-Again shell #Ejecutamos el archivo ejemplo.sh #Le damos privilegio de ejecutable al archivo en cuestin #Ejecutamos el archivo ./ejemplo

#! Se conoce con el nombre de Sha Bang. Se denomina sha-bang a la secuencia #! con la que se inician los scripts. Su funcin es indicarle al sistema que se trata de un conjunto de comandos para que sean interpretados. En realidad, es un nmero mgico de dos bytes. El nmero mgico es un marcador especial para indicar el tipo de archivo, en este caso, indica que se trata de un script de shell ejecutable. Por cada linea que quieras colocar un comentario, lo primero que debe tener es #. Depuracin de un script Depuracin de programas es el proceso de identificar y corregir errores de programacin. En ingls se le conoce como debugging, ya que se asemeja a la eliminacin de bichos (bugs), manera en que se conoce informalmente a los errores de programacin. Se dice que el trmino bug proviene de la poca de las computadoras de bulbos, en las cuales los problemas se generaban por los insectos que eran atrados por las luces y estropeaban el equipo. 7

Depurar el cdigo sirve para ver como se ejecuta paso por paso el script, que valores toman sus variables, si has cometido un fallo saber en que parte del cdigo ha sido, etc. No es algo que se deba hacer obligatoria-mente por cada script realizado (sera demasiado pesado) pero te facilita mucho a la hora de buscar el problema que te surja. Hay dos formas : 1) O bien en la lnea #! /bin/bash -x | -v | -n -x -> Te muestra las instrucciones antes de ejecutarlas por consola y sustituyendo las variables (xtrace) -v -> Te muestra todo pero sin sustituir las variables (verbose) -n -> No ejecuta los comandos, slo comprueba su sintaxis.(noexec) 2) O Mediante set Cambiando las opciones de ejecucin de la shell a lo largo del script, tambin con las opciones -x | -v

Sintaxis

Parmetrosespeciales
* ? [abc...] [!abc...] name + = Coinciden con cualquier cadena de cero o ms caracteres Coincide con cualquier carcter sencillo Coincidir cualquiera de los caracteres cerrados; un guin puede especificar un rango (por ejemplo, a-z, A-Z, 09). No coincide con ningn carcter cerrado Directorio home del usuario en ese momento Directorio home de un usuario especifico Directorio trabajando en el momento Directorio previo trabajado Coincide con cero o una instancia del patrn. Coincide con cero o ms casos de patrn. Coinciden con uno o ms casos de patrn. Coincidir exactamente un ejemplo de patrn. Ningn tipo de partido que no coincidan con patrn.

Con la opcin de extglob: ?(patron) *(patron) +(patron) @(patron) !(patron)

Citando
Citando desactiva un carcter especial significado y le permite ser utilizado literalmente. El seguimiento de tabla muestra los caracteres que tienen un significado especial: Carracter ; & () | <>& *?[] +-@! "\ $ Space tab newline Significado Separador de comandos Ejecucin en segundo plano Agrupacin de comandos Tubera / Pipe Smbolos de re direccionamiento Nombre de archivos meta caracteres Usado en citar otros caracteres Sustitucin de un comando Sustitucin de una variable Separador de palabras 9

Estos caracteres pueden ser usados para citar: Toma todo menos los siguientes caracteres especiales $ Variable ' sustitucin de comando Final de doble citas

\ Caracteres de escape: Secuencia \a \b \cX \e \E \f \n \r \t \v \nnn \xnn \' \ \\ Alerta Barra espaciadora Carcter de control X Escape Escape Pedido de forma Nueva linea Retorna acarreo Tabulador Tabulador Vertical Valor octal Valor hexadecimal Cita simple Doble cita Barra Valor

Formas de ejecucin de comandos


Cmd & Cmd1 ; cmd2 { cmd1; cmd2 ; } ( cmd1;cmd2 ) Cmd1 | cmd2 Cmd1 'cmd2' Cmd1 $(cmd2) Cmd1 $((exprecion)) Cmd1 && cmd2 Cmd1 || cmd2 ! cmd Ejecuta cmd en el fondo o segundo plano Secuencia de comandos en la misma linea Ejecuta comandos como un grupo en el actual shell Ejecuta comandos en un grupo en un subshell Tubera. Usa la salida del cmd1 y cmd2 lo usa como entrada Sustitucin de comando usa la salida de cmd2 como argumento hacia cmd1 Sustitucin de comando. Se permite anidamiento Sustitucin aritmtica. Usa el resultado de la expresion como argumento hacia cmd AND Ejecuta cmd2 si cmd1 se a ejecutado,en caso contrario cmd2 nunca se ejecutara en el caso que cmd1 fallara OR Ejecutara cmd2 si cmd1 falla. En caso contrario cmd2 nunca se ejecutara en el caso de que cmd1 no fallara NOT Ejecutar cmd, y producir un estado de salida cero si sale cmd con un 10

estado distinto de cero. De lo contrario, producir un estado distinto de cero cuando cmd sale con un estado cero.

Formas de re direccionamiento de datos


Archivo 0 1 2 Nombre Estndar de entrada Estndar de salida Estndar de error Abreviatura comn stdin stdout stderr

cmd > fichero cmd >> fichero

Envi salida de cmd a un archivo (Sobrescribe) Redirige la salida estndar del programa al fichero. Aade esta al fichero si esta ya existe

cmd < fichero cmd << test

Redirige el contenido de fichero a la entrada estndar del programa Conocido como Here documents fuerza a que la entrada a un comando sea la entrada estndar (stdin) hasta encontrar test

cmd <<< cadena Conocido como Here string simplemente envan texto a la entrada estndar del comando. cmd <> fichero Abre archivo para leer y escribir en modo entrada Los contenidos no son destruidos cmd >| fichero Envi la salida de cmd a un archivo (sobrescribe), incluso si el shell no tiene la opcin noclobber activada.

11

Re direccin usando descriptores de archivos Los descriptores de archivos suelen mantenerse en el almacenamiento secundario; se pasan al almacenamiento primario al abrir el archivo. Cmd > &n Cmd m>&n Cmd >&Cmd <&n Cmd m<&n Cmd <&Cmd <&nCmd >&nEnvi la salida de cmd a un archivo descriptor n Igual que el anterior, excepto que la salida va al archivo descriptor m y es enviado al archivo descriptor n Cierra salida estndar Toma la entrada de cmd de un archivo descriptor n Igual que el anterior, excepto que la entrada normalmente viene del archivo descriptor m viene desde el archivo descriptor n. Cierra entrada estndar Mueve entrada del archivo descriptor n en vez de duplicarlo Mueve salida del archivo descrito n en vez de duplicarlo

Re direccin multiple Cmd 2>file Cmd > file 2>&1 Cmd &> file Cmd >& file Cmd > f1 2>f2 Cmd | tee files Envi un error estndar a un archivo,salida estndar sigue siendo la mismo Envi ambos estndares, el de error y el de salida a un archivo Igual que el anterior. Forma prefera simplifica la anterior Igual que el anterior Envi salida estndar a archivo f1 y estndar error al archivo f2 Envi salida del cmd a la salida estndar(usualmente a la terminal) y hacia los archivos Cmd 2>&1 | tee files Envi estndar de salida y error del cmd a la salida estndar (terminal) y hacia los archivos

Variables
12

Tipos de Variables Para proceder a declarar variables en un script se muestran las siguiente maneras: Correcto: nombreVar=valor Incorrecto: nombreVar =valor nombreVar= valor 13

nombreVar = valor El valor que se puede asignar a una variable en bash es un numero, una cadena entre o '' ,o incluso boleanos (true / false | 0/1) y arrays. nicamente los arrays se declaran de una forma especial. Las variables de entorno son sensibles a las maysculas y minsculas ! Hay que tener en cuenta que el valor las variables no se le asignan espacios en blanco, se les asigna de otra manera : nombreVar='VALOR con espacios en BLANCOS' nombreVar="VALOR con espacios en BLANCOS" declare [-afFirx] [-p] [name[=value]] settype [-frxi] [name[=value]] -F Muestra el nombre de las funciones -f Muestra el nombre y la implementacin de las funciones -r Variable de solo lectura -x Exportar la variable (Equivalente a export) -i Variable es tratada como un entero -a Variables Arrays -p Muestra toda la lista de las variables declaradas export [-nf] [name[=word]] -f Solo nombres de funciones -p La opcin muestra una lista de todos los nombres de las variables que fueron declaradas en la terminal. -n Causa la eliminacin del nombre de la variable y su valor *Para declarar una variable dentro de una funcin se tiene que usar el comando local. Declarar variables

Aviso hay variables reservadas que no se pueden ingresar valores estas son...

14

BASH BASH_ENV BASH_VERSION BASH_VERSINFO BASH_VERSION BASH_VERSINFO[0] BASH_VERSINFO[1] BASH_VERSINFO[2] BASH_VERSINFO[3] BASH_VERSINFO[4] BASH_VERSINFO[5] CDPATH COLUMNS COMP_WORDS COMP_CWORD COMP_LINE COMP_POINT COMPREPLY DIRSTACK EUID FCEDIT FIGNORE FUNCNAME GLOBIGNORE GROUPS HISTCMD

HOSTTYPE HOME IGNOREEOF IFS INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LINENO LINES MACHTYPE $OSTYPE. MAIL MAILPATH. MAILCHECK MAILPATH OSTYPE OLDPWD OPTERR HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE

SECONDS SHELL SHELLOPTS SHLVL TIMEFORMAT TMOUT UID _ETC_PROFILE DISPLAY CVSROOT EDITOR KDEDIR HOST INPUTRC PS4 PWD RANDOM OPTARG PATH PIPESTATUS last pipe. PPID PROMPT_COMMAND PS1 PS2 PS3 PS4

HISTSIZE HOSTNAME OPTIND LESS LESSOPEN LESSCHARSET LS_COLORS /etc/DIR_COLORS LOGNAME ORGANIZATION PRINTER QTDIR PAGER TEMPDIR TERM USER VISUAL WINDOWMANAGER

*Las variables $1,$2,$3... son consideradas como argumentos hacia el script ej: sh ./ejemplo.sh felix 123 la variable $1 dentro del script sera felix y $2 sera 123 *Las variables $*, $@ y $#: La variable $# almacena el nmero de argumentos o parmetros recibidos por el script o la funcin. El valor es de tipo cadena de caracteres. Tanto $* como $@ nos devuelven los argumentos recibidos por el script o funcin. Arrays Los arrays de los script funcionan de la misma forma que los arrays de cualquier lenguaje de programacin. Un array es un conjunto o agrupacin de valores cuyo acceso se realiza por ndices, en un 15

script se puede almacenar en un mismo array todo tipo de cosas, nmeros, cadenas, caracteres, etc. En los arrays el primer elemento que se almacena lo hace en la posicin 0. En los script no hace falta declarar el tamao de el array, puedes insertar tantos valores como desees. Para declarar un array es de la siguiente forma: declare -a nombre_array declare -a nombres Para darle valores se puede hacer de dos formas: 1. Darle valores posicin por posicin: nombre_array[posicin]=valor nombres[3]=Manolo 2. Darle todos los valores en una sola linea: nombre_array=( valor1 valor2 valor3 [posicion]=valor4 valorN ) nombres=( Maria Alberto Rodrigo [7]=Paco ) Para ver el contenido del array en una posicin: ${nombre_array[posicin]} ${nombres[0]} Para saber cuantos elementos contiene el array: ${#nombre_array[*]} ${#nombres[*]} Para recuperar todos los elementos de una array: ${nombre_array[*]} ${nombres[*]}

Operadores de sustitucin Operador $ {var:-valor} $ {var:+valor} Descripcin Si var existe y no es nula retorna su valor, sino retorna valor. Si var existe y no es nula retorna valor, sino retorna una cadena nula.

16

$ {var:=valor} $ {var:?mensaje}

Si var existe y no es nula retorna su valor,sino retorna una cadena nula Sino imprime var:mensaje y aborta el script que se est ejecutando (slo en shells no interactivos). Si omitimos el mensaje imprime el mensaje por defecto parameter null or not set.

$ {var:offset:longitud}

Retorna una subcadena de var que empieza en offset y tiene longitud caracteres. El primer carcter de var empieza en la posicin 0. Si se omite longitud la subcadena empieza en offset y continua hasta el final de var.

Operadores de bsqueda de patrones Un uso frecuente de los operadores de bsqueda de patrones es eliminar partes de la ruta de un fichero, como pueda ser el directorio o el nombre del fichero . Operador ${var#patron} Descripcin Si patron coincide con la primera parte del valor de var, borra la parte ms pequea que coincide y retorna el resto. ${var##patron} Si patron coincide con la primera parte del valor de var, borra la parte ms grande que coincide y retorna el resto. ${var%patron} Si patron coincide con el final del valor de var, borra la parte ms pequea que coincide y retorna el resto. ${var%%patron} Si patron coincide con el final del valor de var, borra la parte ms grande que coincide y retorna el resto. ${var/patron/cadena} en var es reemplazada por cadena. La primera forma slo reemplaza la primera ${var//patron/cadena} ocurrencia, y la segunda forma reemplaza todas las ocurrencias. Si patron empieza por # debe producirse la coincidencia al principio de var, y si empieza por % debe producirse la coincidencia al final de var. Si cadena es nula se borran las ocurrencias. En ningn caso var se modifica, slo se retorna su valor con modificaciones.

Expresiones Aritmticas

17

Expresiones Aritmticas Bash solo restringe la artrtica de nmeros enteras. $((expr)) Use el valor encerrado de una expresin aritmtica B#n Interpreta nmeros enteros n en un numero de base B. Por ejemplo 8#100 especifica que es de base 8 osea octal. El equivalente en decimal seria 64 Operadores El shell usa operadores aritmticos del lenguaje de programacin C. Operador Descripcin 18

++ -+-! ** */% +<< >> < <= > >= == != & | && || ?: = += -= *= /= %= <<= >>= &= = |= ,

Auto-Incremento Auto-disminucin Unario positivo negativo,negacin lgica,negacin binaria Exponente Multiplicacin Division Modulo Agregado Sustraccin Desplazamiento de bit derecho, Desplazamiento de bit izquierdo Menor que, menor igual que,mayor que,mayor igual que. Igualdad Diferente Bits AND Bits OR Exclusivo Bits OR Lgica AND Lgica OR Evaluacin condicional

Asignacin

Expresin secuencial de evaluacin

Control de flujo

19

Estructura condicional Los condicionales nos permiten comprobar condiciones y hacer que nuestro programa se comporte de una forma u otra, que ejecute un fragmento de cdigo u otro, dependiendo de esta condicin. if condicin then ... else ... fi Como vemos la condicin si (if) se cierra con su correspondiente fi que al parecer un juego de palabras es fcil de recordar. Este lenguaje nos obliga a que las sentencias estn organizadas con estos retornos de carro, aunque algunas personas prefieren poner los then en la misma lnea que los if, para lo cual debemos de usar el separador de comandos, que en Bash es el punto y coma (;) as: if condicin ; then ... else 20

... fi Entonces si la condicin se cumple entrara por el then, en caso de que no, por el else. Pero este es un mtodo simple, luego tenemos uno ms complejo con if anidados, sera: if condicin ; then ... elif condicin ; then ... elif condicin ; then else ... fi Estructura condicional anidada Existe un comando para expresar condiciones y evaluarlas, si son correctas origina cdigos de salida = 0 y si con falsos = 1

El comando pretende abreviar un poco aquellas sentencias tan largas, y por su comodidad y su simple apariencia es el mtodo que ms se suele usar: test expresin Hay que tener en cuenta que la forma es: [(espacio)expresin(espacio)] Ya que si no se ponen los espacios en blanco dara lugar a error. Archivos: Operador -a fichero -b fichero -c fichero -d fichero -e fichero -f fichero -g fichero -G fichero -h fichero -k fichero fichero existe fichero existe y es un dispositivo de bloque fichero existe y es un dispositivo de carcter fichero existe y es un directorio fichero existe (equivalente a -a) fichero existe y es un fichero regular fichero existe y tiene activo el bit de setgid fichero existe y es posedo por el group ID efectivo fichero existe y es un enlace simblico fichero existe y tiene el strick y bit activado 21 Verdadero si ...

-L fichero -N fichero -O fichero -p fichero -r fichero -s fichero -S fichero -u fichero -w fichero -x fichero fich1 -nt fich2 fich1 -ot fich2 fich1 -ef fich2

fichero existe y es un enlace simblico fichero existe y fue modificado desde la ltima lectura fichero existe y es posedo por el user ID efectivo fichero existe y es un pipe o named pipe fichero existe y podemos leerlo fichero existe y no est vaco fichero existe y es un socket fichero existe y tiene activo el bit de setuid fichero existe y tenemos permiso de escritura fichero existe y tenemos permiso de ejecucin, o de bsqueda si es un directorio La fecha de modificacin de fich1 ms moderna que la de fich2 a fecha de modificacin de fich1 ms antigua que la de fich2 fich1 y fich2 son el mismo fichero

Cadenas: cadena = cadena2 > Comprueba si son iguales -z cadena > Comprueba si est vaca cadena != cadena2 > Comprueba que son diferentes Expresiones numricas: exp -eq exp2 > Comprueba si son iguales exp -ge exp2 > Comprueba si exp >= exp2 exp -ne exp2 > Comprueba si exp distinto de exp2 exp -gt exp2 > Comprueba si exp > exp2 exp -le exp2 > Comprueba si exp <= exp2 exp -lt exp2 > Comprueba si exp < exp2 Para concatenar expresiones a evaluar: -o = OR -a = AND ! = NOT

22

Bucles Definidos(for): Los bucles que sabemos cuantas veces se van a repetir. En Bash es un poco distinto a los bucles for tradicionales de otros lenguajes como C o Java, sino que se parece ms al bucle for each de otros lenguajes, ya que aqu no se repite un nmero fijo de veces, sino que se procesan las palabras de una frase una a una. Su sintaxis es la siguiente: for var [in lista] do ... pudiendo usar la variable $var [ break | continue ] done Los bucles while y until: While se usa para repetir un conjunto de comandos/instrucciones dependiendo de si se cumple o no la condicin. La condiciones que se pueden poner en el while son con el comando test, poniendo un true (poniendo un true en el while te creas un bucle infinito) o poner un comando con comillas invertidas. El break se pone solo si quieres salir bruscamente del bucle. La estructura while se estructura de la siguiente forma: while condicin do ... [ break ] done Until se usa para repetir un conjunto de comando hasta que se cumpla la condicin, cuando se cumple el script sale del until. Las condiciones y el break es lo mismo que en el while, si se usa una variable en el until 23

se debe declarar antes. La estructura repetitiva until es de la siguiente forma: until condicin do ... [ break ] done

*Break: Rompe el bucle y no da ms opcin a que la variable se ejecute. *Continue: Salta al siguiente valor de la lista. *Exit exit sale del scritpt. Un entero al final del comando exit 0 0 enviara como retorno del cdigo *Return es usado en una funcin para enviar de regreso un dato Sentencias Case Mientras que esta sentencia en lenguajes como C o Java se usa para comprobar el valor de una variable simple, como un entero o un carcter, en Bash esta sentencia permite realizar una comparacin de patrones con la cadena a examinar. Su sintaxis es la siguiente: case cadena in Patron1) ... ;; Patron2) ... ;; *) ... ;; #Este caso del asterisco es si no pasa ninguno de los patrones. Esac Cada patrn puede estar formado por varios patrones separados por el carcter |. Si cadena cumple alguno de los patrones, se ejecutan sus correspondientes sentencias (las cuales se separan por ;) hasta ;; Select La sentencia select nos permite generar fcilmente un men simple. Su sintaxis es la siguiente: select var [in lista] do ... pudiendo usar la variable $var done Vemos que tiene la misma sintaxis que el bucle for, excepto por la keyword select en vez de for. De hecho si omitimos in lista tambin se usa por defecto $@. La sentencia genera un men con los elementos de lista, donde asigna un nmero a cada elemento, y pide al usuario que introduzca un nmero. El valor elegido se almacena en variable, y el nmero elegido en la variable REPLY. Una vez elegida una opcin por parte del 24

usuario, se ejecuta el cuerpo de la sentencia y el proceso se repite en un bucle infinito. Aunque el bucle de select es infinito (lo cual nos permite volver a pedir una opcin cuantas veces haga falta), el bucle se puede abandonar usando la sentencia break.

Funciones

25

Funciones En el mbito de la programacin, una funcin es un tipo sub-algoritmo, es el trmino para describir una secuencia de rdenes que hacen una tarea especfica de una aplicacin ms grande. function nombreFuncion (){ ... local nombreVariable # Para declarar una variable dentro de una funcin usar el comando local [ return codigoSalida ] } El cdigo de salida especificado por un return es el cdigo de salida del resultado de la ejecucin de todos los comandos en la funcin. Si no se especifica un return devolver el de la ltima salida de esa funcin. Importante: Las funciones se declaran al principio de los scripts.

26

Configuracin de Bash

27

Los ficheros de configuracin de Bash Cada vez que nos logeamos en la cuenta se ejecuta el contenido del fichero /etc/profile, y luego se mira a ver si en el directorio home existe el fichero .bash_profile, de ser as se ejecuta su contenido para personalizar aspectos de nuestra cuenta. Cualquier configuracin que aadamos a .bash_profile no ser efectiva hasta que salgamos de la cuenta y volvamos a logearnos, si hacemos cambios en este fichero y queremos verlos sin salir de la cuenta podemos usar el comando source, el cual ejecuta el contenido del fichero que le digamos: $ source .bash_profile Alternativamente al comando source est el comando punto (.), con lo que el contenido de .bash_profile tambin se podra haber ejecutado as: $ . .bash_profile Bash permite usar dos nombres alternativos para .bash_profile por razones de compatibilidad histrica: .bash_login, nombre derivado del fichero .login del C Shell, y .profile nombre usado por el Bourne Shell y el Korn Shell. En cualquier caso, slo uno de estos ficheros ser ejecutado: Si .bash_profile existe los dems sern ignorados, sino Bash comprueba si existe .bash_login y, slo si ste tampoco existe, comprueba si existe .profile. La razn por la que se eligi este orden de bsqueda es que podemos almacenar en .profile opciones propias del Bourne Shell, y aadir opciones exclusivas de Bash en el fichero .bash_profile seguido del comando source .profile para que Bash tambin cargue las opciones del fichero .profile. .bash_profile se ejecuta slo al logearnos, si abrimos otro shell (ejecutando bash o su) desde la lnea de comandos de Bash lo que se intenta ejecutar es el contenido de .bashrc. Si .bashrc no existe no se ejecutan configuraciones adicionales al abrir un nuevo shell. Este esquema nos permite separar configuraciones que se hacen una sola vez, al logearnos, de configuraciones que se cambian cada vez que se abre un nuevo shell. Si hay configuraciones en .bashrc que tambin queremos ejecutar al logearnos podemos poner source .bashrc dentro del fichero .bash_profile. Por ltimo, el fichero .bash_logout es un fichero que, de existir, contiene ordenes que se ejecutarn al abandonar la cuenta, por ejemplo eliminar ficheros temporales o almacenar datos de actividad de usuarios en un fichero de log.

Alias Un alias es un nombre ms corto para un comando que usamos muy a menudo. Se configuran generalmente en $HOME/.bashrc o .bash_profile 28

$ alias ll='ls -laF' Por ltimo, si queremos borrar la definicin de un alias podemos usar el comando unalias: $ unalias ll Indicador o Prompt Las variables PS1, PS2, y PS4 dentro de bash tienen estas secuencias de caracteres de escape: Opcion \a \A \d \D {formato} \e \H \h \j \l \n \r \s \t \T \u \v \w \W \# \! \$ \nnn \\ \[ \] Descripcin El carcter ASCII bell (007) La hora en formato HH:MM La fecha en formato semana mes dia Nos permite personalizar ms la fecha El carcter de escape ASCII (033) Hostname El nombre de la mquina hasta el primer punto Nmero de jobs hijos del shell Nombre del terminal en el que estamos trabajando (p.e. ttyp2) Retorno de carro y nueva lnea Retorno de carro Nombre del shell Hora en formato HH:MM:SS con 12 horas Hora en el formato anterior pero con 24 horas Nombre de usuario Versin de Bash Ruta del directorio actual Nombre del directorio actual (sin ruta) Nmero de comandos ejecutados Nmero histrico del comando # si somos root, o $ en caso contrario Cdigo de carcter a mostrar en octal La barra haca atrs Empieza una secuencia de caracteres no irreprimibles, como los caracteres de control de secuencias del terminal Acaba una secuencia de caracteres no irreprimibles Opciones de bash Opcin cdable_vars cdspell Descripcin Permite que cd use los valores de las variables como nombres de directorios. Ignora pequeos errores en los cambios de directorio con cd. Slo en la ejecucin interactiva. 29

cmdhist

Guarda los comandos que hemos escrito en varias lneas en una sola lnea del historial.

dotglob expand_aliases Extglob failglob

Incluye en la expansin de comodines los ficheros que empiezan por punto (.) Expande un alias cuando lo ejecuta. Utiliza extensiones de los comodines. Si falla la expansin de un comodn porque no encuentra nada falla el comando (como hace el C Shell).

force_fignore

Los sufijos especificados en la variable de entorno FIGNORE no se usan para completar palabras con tabulador.

hostcomplete

Se intenta completar nombres de host al pulsar tabulador cuando la palabra contiene una @.

interactive_comments Permite que dentro de un comando de sesin interactiva haya comentarios (precedidos por #) login_shell nocaseglob Variable de slo lectura que indica si Bash ha sido lanzado como un shell de login Indica si los comodines expanden sin sensibilidad a maysculas/minsculas. No confundir con la variable completion-

30

You might also like