Aprender Bash

November 21, 2017 | Author: Clarysa Fernandez Guerrero | Category: Command Line Interface, Computer File, Software Development, Areas Of Computer Science, Computer Programming
Share Embed Donate


Short Description

Download Aprender Bash...

Description

1

BASH: Este libre se distribuye bajo una licencia: Creative Commons Atribución-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: Atribución. Usted debe atribuir la obra en la forma especificada por el autor Dal Mas, Augusto Félix.

: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, sólo podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta. * Ante cualquier re-utilización o distribución, usted debe dejar claro a los otros los términos 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. Código legal: http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode

Contenido INTRODUCCIÓN ¿Qué es Bash y Shell?

INSTALACIÓN, EJECUCIÓN Y DEPURACIÓN 2

Instalación y Ejecución de bash ¿Como se ejecuta y empieza un script? Depuración de un script

SINTAXIS Parámetros especiales Citando Formas de ejecución de comandos Formas de direccionamiento de datos (Entrada/Salida). *Re dirección *Re dirección usando descriptores de archivos *Re dirección multiple

VARIABLE Tipos de variables sobre bash Operadores de sustitución y de búsqueda de patrones

EXPRESIÓN ARITMÉTICA CONTROL DE FLUJO Estructura condicional Bucles Sentencias

FUNCIÓN CONFIGURACIÓN DE BASH Ficheros Alias Indicador (Prompt) Opciones

Introducción

3

¿Qué es Bash y Shell? Bash es el shell o intérprete de lenguaje de comando, para el sistema operativo GNU. El nombre es un acrónimo 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 séptima edición de Bell Labs Research versión de Unix. Bash es ampliamente compatible con sh e incorpora funciones útiles a partir de la cáscara ksh Korn y el shell C csh. Se pretende que sea una aplicación conforme de la ieee posix Shell y Herramientas de la especificación IEEE POSIX (estándar IEEE 1003.1). Ofrece mejoras funcionales tanto para sh más interactivo y el uso de programación. Si bien el sistema operativo GNU ofrece otros depósitos, entre ellos una versión del csh, Bash es el shell por defecto. Al igual que otros de software GNU, Bash es muy portátil. 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 intérprete de comandos y un lenguaje de programación. Como un intérprete de comandos, el shell es la interfaz del usuario proporcionado un gran conjunto de utilidades GNU; un shell permite la ejecución de comandos gnu, tanto sincrónica y asíncronica. El intérprete de comandos espera sincróncamente comandos para completar antes de aceptar más entradas; asíncroncamente sigue para ejecutar comandos en paralelo con el shell mientras se lee y ejecutan comandos adicionales. La re-dirección de flujos permiten un control detallado de la entrada y salida de los comandos. Si bien es esencial la ejecución de comandos, la mayor parte del potencial (y la complejidad) de los shell's se debe su incorporación de un lenguaje de programación. 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 programación, 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 modulación de código. Imperativo y de propósito general, permite la manipulación de ciertas características del sistema operativo haciendo uso del intérprete de comandos como mediador entre el usuario y el sistema operativo.

Instalación ,ejecución y depuración

5

Instalación y Ejecución de bash Existen varias versiones de Bash y no hay ningún requisito de que Bash debe estar presente en cualquier distribución dado que esta implementado bajo las normas IEEE POSIX. El shell Bash es el software de código abierto publicado bajo la Licencia Pública GNU (GPL). Si necesita instalar Bash, el lenguaje C, el código fuente está disponible gratuitamente a partir de la Free Software Foundation en http://www.gnu.org a través de una descarga de sus mirrors. El procedimiento de instalación de Bash puede variar con el tiempo. Las instrucciones completas se encuentran en el archivo README que acompaña a las fuentes. Sin embargo, la instalación es en gran medida automatizada .El procedimiento básico es el siguiente: 1. Ejecute el programa de configuración para determinar su sistema operativo y verificar la características necesarias para compilar Bash. ./configure 2. Ejecute make para construir Bash. 3. Ejecute make tests. Pruebas de diagnóstico 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 intérprete de comandos. Si no tiene privilegio de superusuario en el equipo, puede compilar y install Bash en su cuenta personal. Utilice la opción-prefix a configurar con especificar el directorio para instalar Bash. Por ejemplo,-prefix = $ HOME o -- prefix = $ HOME / bash podrían ser buenas opciones. 6

Ejecutar bash El intérprete 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 después la tecla Q Argumentos Argumentos se asignan con el fin de la parámetros $ 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

#Ejecutamos el archivo ejemplo.sh

2) chmod +x ejemplo.sh

#Le damos privilegio de ejecutable al archivo en cuestión

./ejemplo.sh

#Ejecutamos el archivo ./ejemplo

Empezar un script En la primera línea del script se debe indicar que shell que vas a usar ( /bin/bash/ , /usr/bin/perl , etc ): #! /usr/bin/perl

O

#!bin/perl

Declaras Perl Shell

#!/usr/bin/sh

O

#!/bin/sh

Declaras en Bourne shell

#!/usr/bin/ksh

O

#!/bin/ksh

Declaras en Korn shell

#!/usr/bin/csh

O

#!/bin/csh

Declaras en C shell

#!/usr/bin/bash

O

#!/bin/bash

Declaras en Bourne-Again shell

#! Se conoce con el nombre de Sha Bang. Se denomina “sha-bang ” a la secuencia #! con la que se inician los scripts. Su función es indicarle al sistema que se trata de un conjunto de comandos para que sean interpretados. En realidad, es un número mágico de dos bytes. El número mágico 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 #. Depuración de un script Depuración de programas es el proceso de identificar y corregir errores de programación. En inglés se le conoce como debugging, ya que se asemeja a la eliminación de bichos (bugs), manera en que se conoce informalmente a los errores de programación. Se dice que el término bug proviene de la época de las computadoras de bulbos, en las cuales los problemas se generaban por los insectos que eran atraídos por las luces y estropeaban el equipo. 7

Depurar el código 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 código ha sido, etc. No es algo que se deba hacer obligatoria-mente por cada script realizado (sería demasiado pesado) pero te facilita mucho a la hora de buscar el problema que te surja. Hay dos formas : 1) O bien en la línea #! /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, sólo comprueba su sintaxis.(noexec) 2) O Mediante set Cambiando las opciones de ejecución de la shell a lo largo del script, también con las opciones -x | -v

Sintaxis

8

Parámetros especiales *

Coinciden con cualquier cadena de cero o más caracteres

?

Coincide con cualquier carácter sencillo

[abc...]

Coincidir cualquiera de los caracteres cerrados; un guión puede especificar un rango (por ejemplo, a-z, A-Z, 0–9).

[!abc...]

No coincide con ningún carácter cerrado Directorio home del usuario en ese momento

̃ name ̃

Directorio home de un usuario especifico

+ ̃

Directorio trabajando en el momento

= ̃

Directorio previo trabajado

Con la opción de extglob: ?(patron)

Coincide con cero o una instancia del patrón.

*(patron)

Coincide con cero o más casos de patrón.

+(patron)

Coinciden con uno o más casos de patrón.

@(patron)

Coincidir exactamente un ejemplo de patrón.

!(patron)

Ningún tipo de partido que no coincidan con patrón.

Citando Citando desactiva un carácter especial significado y le permite ser utilizado literalmente. El seguimiento de tabla muestra los caracteres que tienen un significado especial: Carracter

Significado

;

Separador de comandos

&

Ejecución en segundo plano

()

Agrupación de comandos

|

Tubería / Pipe

& *?[] ̃+-@! "’\

Símbolos de re direccionamiento Nombre de archivos meta caracteres Usado en citar otros caracteres



Sustitución de un comando

$

Sustitución de una variable

Space tab newline

Separador de palabras 9

Estos caracteres pueden ser usados para citar: “ ” Toma todo menos los siguientes caracteres especiales $

Variable

' sustitución de comando “ Final de doble citas

\ Caracteres de escape: Secuencia

Valor

\a

Alerta

\b

Barra espaciadora

\cX

Carácter de control X

\e

Escape

\E

Escape

\f

Pedido de forma

\n

Nueva linea

\r

Retorna acarreo

\t

Tabulador

\v

Tabulador Vertical

\nnn

Valor octal

\xnn

Valor hexadecimal

\'

Cita simple

\”

Doble cita

\\

Barra

Formas de ejecución de comandos Cmd & Cmd1 ; cmd2 { cmd1; cmd2 ; }

Ejecuta cmd en el fondo o segundo plano Secuencia de comandos en la misma linea Ejecuta comandos como un grupo en el actual shell

( cmd1;cmd2 )

Ejecuta comandos en un grupo en un subshell

Cmd1 | cmd2

Tubería. Usa la salida del cmd1 y cmd2 lo usa como entrada

Cmd1 'cmd2'

Sustitución de comando usa la salida de cmd2 como argumento hacia cmd1

Cmd1 $(cmd2) Cmd1 $((exprecion))

Sustitución de comando. Se permite anidamiento Sustitución aritmética. Usa el resultado de la expresion como argumento hacia cmd

Cmd1 && cmd2

AND Ejecuta cmd2 si cmd1 se a ejecutado,en caso contrario cmd2 nunca se ejecutara en el caso que cmd1 fallara

Cmd1 || cmd2

OR Ejecutara cmd2 si cmd1 falla. En caso contrario cmd2 nunca se ejecutara en el caso de que cmd1 no fallara

! cmd

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

Nombre

Abreviatura común

0

Estándar de entrada

stdin

1

Estándar de salida

stdout

2

Estándar de error

stderr

cmd > fichero

Enviá salida de cmd a un archivo (Sobrescribe)

cmd >> fichero

Redirige la salida estándar del programa al fichero. Añade esta al fichero si esta ya existe

cmd < fichero

Redirige el contenido de fichero a la entrada estándar del programa

cmd &n

Igual que el anterior, excepto que la salida va al archivo descriptor m y es enviado al archivo descriptor n

Cmd >&-

Cierra salida estándar

Cmd &1

Enviá ambos estándares, el de error y el de salida a un archivo

Cmd &> file

Igual que el anterior. Forma prefería simplifica la anterior

Cmd >& file

Igual que el anterior

Cmd > f1 2>f2

Enviá salida estándar a archivo f1 y estándar error al archivo f2

Cmd | tee files

Enviá salida del cmd a la salida estándar(usualmente a la terminal) y hacia los archivos

Cmd 2>&1 | tee files Enviá estándar de salida y error del cmd a la salida estándar (terminal) y hacia los archivos

Variables 12

Tipos de Variables Para proceder a declarar variables en un script se muestran las siguiente maneras: Correcto:

Incorrecto:

nombreVar=valor

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 mayúsculas y minúsculas ! 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]]

Declarar variables

settype [-frxi] [name[=value]] -F Muestra el nombre de las funciones -f Muestra el nombre y la implementación 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 opción muestra una lista de todos los nombres de las variables que fueron declaradas en la terminal. -n Causa la eliminación del nombre de la variable y su valor *Para declarar una variable dentro de una función se tiene que usar el comando local.

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

14

BASH

HOSTTYPE

SECONDS

HISTSIZE

BASH_ENV

HOME

SHELL

HOSTNAME

BASH_VERSION

IGNOREEOF

SHELLOPTS

OPTIND

BASH_VERSINFO

IFS

SHLVL

LESS

BASH_VERSION

INPUTRC

TIMEFORMAT

LESSOPEN

BASH_VERSINFO[0]

LANG

TMOUT

LESSCHARSET

BASH_VERSINFO[1]

LC_ALL

UID

LS_COLORS

BASH_VERSINFO[2]

LC_COLLATE

_ETC_PROFILE

/etc/DIR_COLORS

BASH_VERSINFO[3]

LC_CTYPE

DISPLAY

LOGNAME

BASH_VERSINFO[4]

LC_MESSAGES

CVSROOT

ORGANIZATION

BASH_VERSINFO[5]

LINENO

EDITOR

PRINTER

CDPATH

LINES

KDEDIR

QTDIR

COLUMNS

MACHTYPE

HOST

PAGER

COMP_WORDS

$OSTYPE.

INPUTRC

TEMPDIR

COMP_CWORD

MAIL

PS4

TERM

COMP_LINE

MAILPATH.

PWD

USER

COMP_POINT

MAILCHECK

RANDOM

VISUAL

COMPREPLY

MAILPATH

OPTARG

WINDOWMANAGER

DIRSTACK

OSTYPE

PATH

EUID

OLDPWD

PIPESTATUS

FCEDIT

OPTERR

last pipe.

FIGNORE

HISTCONTROL

PPID

FUNCNAME

HISTFILE

PROMPT_COMMAND

GLOBIGNORE

HISTFILESIZE

PS1

GROUPS

HISTIGNORE

PS2

HISTCMD

PS3 PS4

*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 número de argumentos o parámetros recibidos por el script o la función. El valor es de tipo cadena de caracteres. Tanto $* como $@ nos devuelven los argumentos recibidos por el script o función. Arrays Los arrays de los script funcionan de la misma forma que los arrays de cualquier lenguaje de programación. Un array es un conjunto o agrupación de valores cuyo acceso se realiza por índices, en un 15

script se puede almacenar en un mismo array todo tipo de cosas, números, cadenas, caracteres, etc. En los arrays el primer elemento que se almacena lo hace en la posición 0. En los script no hace falta declarar el tamaño 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 posición por posición: nombre_array[posición]=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 posición: ${nombre_array[posición]} ${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 sustitución Operador

Descripción

$ {var:-valor}

Si var existe y no es nula retorna su valor, sino retorna valor.

$ {var:+valor}

Si var existe y no es nula retorna valor, sino retorna una cadena nula.

16

$ {var:=valor}

Si var existe y no es nula retorna su valor,sino retorna una cadena nula

$ {var:?mensaje}

Sino imprime var:mensaje y aborta el script que se esté ejecutando (sólo 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 carácter de var empieza en la posición 0. Si se omite longitud la subcadena empieza en offset y continua hasta el final de var.

Operadores de búsqueda de patrones Un uso frecuente de los operadores de búsqueda de patrones es eliminar partes de la ruta de un fichero, como pueda ser el directorio o el nombre del fichero . Operador

Descripción

${var#patron}

Si patron coincide con la primera parte del valor de var, borra la parte más pequeña que coincide y retorna el resto.

${var##patron}

Si patron coincide con la primera parte del valor de var, borra la parte más grande que coincide y retorna el resto.

${var%patron}

Si patron coincide con el final del valor de var, borra la parte más pequeña que coincide y retorna el resto.

${var%%patron}

Si patron coincide con el final del valor de var, borra la parte más grande que coincide y retorna el resto.

${var/patron/cadena} en var es reemplazada por cadena. La primera forma sólo 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 ningún caso var se modifica, sólo se retorna su valor con modificaciones.

Expresiones Aritméticas

17

Expresiones Aritméticas Bash solo restringe la artrítica de números enteras. $((expr)) Use el valor encerrado de una expresión aritmética B#n Interpreta números 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 aritméticos del lenguaje de programación C. Operador

Descripción 18

++ --

Auto-Incremento Auto-disminución

+-! ̃

Unario positivo negativo,negación lógica,negación binaria

** */% +> < >= == !=

Exponente Multiplicación Division Modulo Agregado Sustracción 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

&&

Lógica AND

||

Lógica OR

?:

Evaluación condicional

= += -= *= /= %=

Asignación

= &= ˆ= |=

Expresión secuencial de evaluación

,

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 código u otro, dependiendo de esta condición. if condición then ... else ... fi Como vemos la condición si (if) se cierra con su correspondiente fi que al parecer un juego de palabras es fácil de recordar. Este lenguaje nos obliga a que las sentencias estén organizadas con estos retornos de carro, aunque algunas personas prefieren poner los then en la misma línea que los if, para lo cual debemos de usar el separador de comandos, que en Bash es el punto y coma (;) así: if condición ; then ... else 20

... fi Entonces si la condición se cumple entraría por el then, en caso de que no, por el else. Pero este es un método simple, luego tenemos uno más complejo con if anidados, sería: if condición ; then ... elif condición ; then ... elif condición ; then else ... fi Estructura condicional anidada Existe un comando para expresar condiciones y evaluarlas, si son correctas origina códigos 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 método que más se suele usar: test expresión Hay que tener en cuenta que la forma es: [(espacio)expresión(espacio)] Ya que si no se ponen los espacios en blanco daría lugar a error. Archivos: Operador

Verdadero si ...

-a fichero

fichero existe

-b fichero

fichero existe y es un dispositivo de bloque

-c fichero

fichero existe y es un dispositivo de carácter

-d fichero

fichero existe y es un directorio

-e fichero

fichero existe (equivalente a -a)

-f fichero

fichero existe y es un fichero regular

-g fichero

fichero existe y tiene activo el bit de setgid

-G fichero

fichero existe y es poseído por el group ID efectivo

-h fichero

fichero existe y es un enlace simbólico

-k fichero

fichero existe y tiene el strick y bit activado 21

-L fichero

fichero existe y es un enlace simbólico

-N fichero

fichero existe y fue modificado desde la última lectura

-O fichero

fichero existe y es poseído por el user ID efectivo

-p fichero

fichero existe y es un pipe o named pipe

-r fichero

fichero existe y podemos leerlo

-s fichero

fichero existe y no está vacío

-S fichero

fichero existe y es un socket

-u fichero

fichero existe y tiene activo el bit de setuid

-w fichero

fichero existe y tenemos permiso de escritura

-x fichero

fichero existe y tenemos permiso de ejecución, o de búsqueda si es un directorio

fich1 -nt fich2

La fecha de modificación de fich1 más moderna que la de fich2

fich1 -ot fich2

a fecha de modificación de fich1 más antigua que la de fich2

fich1 -ef fich2

fich1 y fich2 son el mismo fichero

Cadenas: “cadena” = “cadena2″ –> Comprueba si son iguales -z cadena –> Comprueba si está vacía “cadena” != “cadena2″ –> Comprueba que son diferentes Expresiones numéricas: 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 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 más al bucle for each de otros lenguajes, ya que aquí no se repite un número 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 condición. 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 condición do ... [ break ] done Until se usa para repetir un conjunto de comando hasta que se cumpla la condición, 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 condición do ... [ break ] done

*Break: Rompe el bucle y no da más opción 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 código *Return es usado en una función 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 carácter, en Bash esta sentencia permite realizar una comparación 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 patrón puede estar formado por varios patrones separados por el carácter |. 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 fácilmente 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 también se usa por defecto $@. La sentencia genera un menú con los elementos de lista, donde asigna un número a cada elemento, y pide al usuario que introduzca un número. El valor elegido se almacena en variable, y el número elegido en la variable REPLY. Una vez elegida una opción 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 opción cuantas veces haga falta), el bucle se puede abandonar usando la sentencia break.

Funciones

25

Funciones En el ámbito de la programación, una función es un tipo sub-algoritmo, es el término para describir una secuencia de órdenes que hacen una tarea específica de una aplicación más grande. function nombreFuncion (){ ... local nombreVariable # Para declarar una variable dentro de una función usar el comando local [ return codigoSalida ] } El código de salida especificado por un return es el código de salida del resultado de la ejecución de todos los comandos en la función. Si no se especifica un return devolverá el de la última salida de esa función. Importante: Las funciones se declaran al principio de los scripts.

26

Configuración de Bash

27

Los ficheros de configuración 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 configuración que añadamos 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 también se podría haber ejecutado así: $ . .bash_profile Bash permite usar dos nombres alternativos para .bash_profile por razones de compatibilidad histórica: .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, sólo uno de estos ficheros será ejecutado: Si .bash_profile existe los demás serán ignorados, sino Bash comprueba si existe .bash_login y, sólo si éste tampoco existe, comprueba si existe .profile. La razón por la que se eligió este orden de búsqueda es que podemos almacenar en .profile opciones propias del Bourne Shell, y añadir opciones exclusivas de Bash en el fichero .bash_profile seguido del comando source .profile para que Bash también cargue las opciones del fichero .profile. .bash_profile se ejecuta sólo al logearnos, si abrimos otro shell (ejecutando bash o su) desde la línea 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 también 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 ejecutarán 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 más 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 definición 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

Descripción

\a

El carácter ASCII bell (007)

\A

La hora en formato HH:MM

\d

La fecha en formato semana mes dia

\D {formato}

Nos permite personalizar más la fecha

\e

El carácter de escape ASCII (033)

\H

Hostname

\h

El nombre de la máquina hasta el primer punto

\j

Número de jobs hijos del shell

\l

Nombre del terminal en el que estamos trabajando (p.e. ttyp2)

\n

Retorno de carro y nueva línea

\r

Retorno de carro

\s

Nombre del shell

\t

Hora en formato HH:MM:SS con 12 horas

\T

Hora en el formato anterior pero con 24 horas

\u

Nombre de usuario

\v

Versión de Bash

\w

Ruta del directorio actual

\W

Nombre del directorio actual (sin ruta)

\#

Número de comandos ejecutados

\!

Número histórico del comando

\$

# si somos root, o $ en caso contrario

\nnn

Código de carácter a mostrar en octal

\\

La barra hacía atrás

\[

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 Opción cdable_vars cdspell

Descripción Permite que cd use los valores de las variables como nombres de directorios. Ignora pequeños errores en los cambios de directorio con cd. Sólo en la ejecución interactiva. 29

cmdhist

Guarda los comandos que hemos escrito en varias líneas en una sola línea del historial.

dotglob expand_aliases

Incluye en la expansión de comodines los ficheros que empiezan por punto (.) Expande un alias cuando lo ejecuta.

Extglob

Utiliza extensiones de los comodines.

failglob

Si falla la expansión de un comodín 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 sesión interactiva haya comentarios (precedidos por #) login_shell

Variable de sólo lectura que indica si Bash ha sido lanzado como un shell de login

nocaseglob

Indica si los comodines expanden sin sensibilidad a mayúsculas/minúsculas. No confundir con la variable completion-

30

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF