Script

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
(Entrada/Salida)
Línea 187: Línea 187:
  
 
==Entrada/Salida==
 
==Entrada/Salida==
 +
 +
En algunas ocasiones será necesario leer ciertas variables desde el teclado o imprimirlas a la pantalla, para imprimir a la pantalla se pueden invocar dos programas en la linea de comandos:
 +
 +
 +
 +
*echo
 +
 +
*printf 
 +
(que es un echo mejorado)
 +
 +
 +
 +
Y para leer desde el teclado se usa:
 +
 +
 +
 +
*read
 +
 +
 +
 +
Si hacemos un read sin asignar variable, el dato de almacena en '''$REPLY''' una variable del sistema. Tanto el comando '''echo''' como '''read''' tienen sus propias opciones.
 +
 +
Ejemplos:
 +
 +
#Si creamos en una linea del Script una variable como un comando y queremos imprimir la variable a la pantalla podemos hacer algo así:
 +
 +
VARIABLE=`comando`
 +
echo "$VARIABLE"
 +
La palabra $VARIABLE está puesta entre comillas dobles para que se imprima todo el texto ignorando los espacios entre palabras.
 +
 +
#Si escribimos en una linea del guión
 +
 +
read PREGUNTA
 +
 +
habremos creado una variable de nombre PREGUNTA así es que si luego ponemos
 +
 +
echo "$PREGUNTA"
 +
 +
Se imprimirá a la pantalla lo que se escribió en el teclado al presionar la tecla Enter.
 +
 +
Con los elementos tratados hasta aquí ya podemos escribir nuestros primeros guiónes
 +
 +
Guión 1
 +
 +
#!/bin/bash
 +
echo Hola mundo
 +
 +
Cuando se corre este guión se imprimirá a la pantalla Hola mundo
 +
 +
Guión 2
 +
Lo mismo usando una variable
 +
 +
#!/bin/bash
 +
VARIABLE=Hola mundo
 +
echo "$VARIABLE"
 +
 +
Nótese la variable entre comillas dobles para que imprima todo el texto.
 +
 +
Guión 3
 +
Cuando se usan mas de una variable
 +
 +
#!/bin/bash
 +
VARIABLE=Hola
 +
SALUDO=mundo
 +
echo "$VARIABLE""$SALUDO"
 +
 +
En los tres casos se imprimirá a la pantalla Hola mundo
 +
 +
Guión 4
 +
Si se usan caracteres especiales la cosa puede cambiar
 +
 +
#!/bin/bash
 +
VAR=auto
 +
echo "Me compré un $VAR"    Imprimirá Me compré un auto
 +
echo 'Me compré un $VAR'    Imprimirá Me compré un $VAR
 +
echo "Me compré un \$VAR"    Imprimirá  Me compré un $VAR
 +
 +
Note como las comillas simples y el carácter \ hacen que Bash ignore la función del carácter especial $. Siempre las comillas simples harán que se ignore todos los meta caracteres encerrados entre ellas y \ solo el que sigue después.

Revisión de 23:53 10 feb 2008

Contenido

Definición

Un Script (o guion) para Bash es un archivo de texto que contiene una sucesión de comandos de Shell que pueden ejecutar diversas tareas de acuerdo al contenido del texto del guión. De esta forma pueden automatizarse muchas acciones para alguna necesidad particular o para la administración de sistemas. El guión debe escribirse en un orden lógico pues Bash ejecutará el guión en el orden en que se escriben las lineas, de la misma forma que cuando se realiza una tarea cualquiera por una persona, por ejemplo; primero hay que poner la escalera y luego subirse.

Los Scripts de Bash deben tener siempre como primera linea del guión el texto, para que el Sistema Operativo ejecute la acción usando el programa Bash.

#!/bin/bash

Una vez escrito el Script y guardado en el disco en alguno de los directorios "bin" con el nombre y permiso de ejecución apropiados, se invoca, escribiendo en la consola el nombre del guión. Si el guión tiene una interfaz gráfica se invoca como otro programa cualquiera, uno o dos clic sobre el guión o su icono. Este puede escribirse en cualquiera de los editores de texto de Linux, por ejemplo Kwrite y será ya un guión funcional cuando se salve a alguno de los "bin".

Nota: Es buena práctica cuando se escribe un guión salvarlo apenas se hayan escrito las primeras línea para ir comprobando su funcionamiento e ir corrigiendo los problemas.

Variables

Es impensable elaborar Scripts de Bash sin el uso de las variables. Una variable es una estructura de texto (una letra, un número o sucesiones de ellos) que representa alguno de los elementos que varían en valor y/o significado en el entorno de la Shell, sirviendo como elemento básico de entrada/salida de valores a y desde los comandos en su ejecución consecutiva. Para invocar una variable se utiliza el carácter especial $ precediendo al nombre de la variable.

Exixten dos tipos de variables:

Variables intrínsecas de Bash.

Estas son elaboradas por defecto por el propio Bash y son:

  • $0

Nombre del guión

  • $1....$n

Variables que almacenan los n argumentos (opciones) proporcionados al comando.

  • $#

Variable que contiene el total de los argumentos proporcionados.

  • $*

Conjunto de los argumentos.

  • $?

Valor de ejecución del comando anterior, si es cero es que el comando anterior se ejecutó sin errores, de lo contrario hubo algún error.

  • $$

Identifica el proceso del guión.

  • $!

Identifica el último proceso arrancado en el trasfondo (background).

Variables creadas por el programador.

Las variables pueden ser creadas en cualquier momento, pero siempre antes de su utilización de manera muy simple, se escribe:

nombre_variable=valor_variable

en cualquier momento posterior a la creación si se coloca $nombre_variable dentro del entorno de la Shell el sistema colocará allí valor_variable.

SALUDO=Bienvenido

En cualquier momento posterior si se pone $SALUDO, Bash colocará ahí Bienvenido.

Una variable también puede ser la salida de un comando si ponemos al principio y final del mismo un acento invertido.

SALIDA=`comando`   

le indicará al sistema que donde se escriba $SALIDA debe poner la salida de ese comando. Es práctica común utilizar mayúsculas para las variables a fin de identificarlas fácilmente dentro del guión.

Cuando se ejecutan Scripts que pueden ser "hijos" de otro guión en ocasiones es necesario exportar las variables, esto se hace escribiendo;

export nombre_variable

Caracteres especiales

Existe un grupo de caracteres especiales (también llamados meta caracteres) que tienen significado propio para Bash. Algunos son:

  • \

Le indica a Bash que ignore el carácter especial que viene después.

  • " "

Cuando se encierra entre comillas dobles un texto o una variables si esta es una frase (cadena de palabras) Bash lo interpretará como una cadena única.

  • $

Identifica que lo que le sigue es una variable.

  • ' '

Las comillas simples se usan para desactivar todos los caracteres especiales encerrados dentro de ellas, así tenemos que si escribe '$VARIABLE' Bash interpreta literalmente lo escrito y no como variable.

  • #

Cuando se coloca este carácter dentro de una linea del guión, Bash ignora el resto de la linea. Muy útil para hacer comentarios y anotaciones o para inhabilitar una linea de comandos al hacer pruebas.

  • ;

Este carácter se usa para separar la ejecución de distintos comandos en una misma linea de comandos.

  • ``

Se utiliza como se explicó en el punto anterior, para convertir la salida de un comando en una variable. El comando en cuestión se ejecuta en una sub shell.

También están |, (), !, >, <, cuyo significado se verá mas adelante. El espacio es otro carácter especial y se interpreta por bash como el separador del nombre del programa y las opciones dentro de la linea de comandos, por esta razón es importante encerrar entre comillas dobles el texto o las propias variables cuando son una frase de varias palabras.

Otro carácter que debe evitarse en lo posible su uso es el guión (-) ya que para la mayoría de los programas se usa para indicarle al propio programa que lo que sigue es una de sus opciones, de manera tal por ejemplo, si usted crea un archivo con nombre -archivo (en caso que pueda) después será difícil borrarlo ya que rm (programa que borra) tratará el archivo como una de sus opciones (al "ver" el Script) y dará de error algo así, "Opción -archivo no se reconoce".

Palabras especiales

Hay un grupo de palabras que tienen significado especial para bash y que siempre que se pueda deben evitarse cuando se escriben lineas de comandos para no crearle "confusiones" algunas son: exit, break, continue, true, false, return etc... cuyo significado es mas o menos así:

  • exit

Se sale del guión

  • break

Se manda explícitamente a salir de un ciclo

  • continue

Se manda explícitamente a retornar en un ciclo

  • return

Como exit pero solo se sale del comando u operación sin cerrar el guión

  • true

Indica que una condición es verdadera

  • false

Indica que una condición es falsa

Argumentos propios de bash

Bash como programa tiene algunos argumentos útiles y propios que se usan con frecuencia en la elaboración de Scripts en los condicionales vinculados a la determinación de elementos sobre los archivos, variables, cadenas de palabras o cadenas de pruebas, los mas comunes son:

Argumentos de Archivos Cierto si.... (salida 0)
-d Archivo existe y es un directorio
-c Archivo existe y es de caracteres
-e Archivo existe
-h Archivo existe y es un vínculo simbólico
-s Archivo existe y no está vacío
-f Archivo existe y es normal
-r Tienes permiso de lectura del archivo
-w Tienes permiso de escritura en el archivo
-x Tienes permiso de ejecución del archivo
-O Eres propietario del archivo
-G Perteneces al grupo que tiene acceso al archivo
-n Variable existe y no es nula
Archivo1 nt Archivo2 Archivo1 es mas nuevo que Archivo2
Archivo1 -ot Archivo2 Archivo1 es mas viejo que Archivo2
Agumentos de cadenas Cierto si
-z La cadena está vacía
-n La cadena no está vacía
cadena1 = cadena2 Si las cadenas son iguales
cadena1 != cadena2 Si las cadenas son diferentes
cadena1 < cadena2 Si la cadena 1 va antes en el orden lexicográfico
cadena1 >cadena2 Si la cadena 1 va despues en el orden lexicográfico


















Entrada/Salida

En algunas ocasiones será necesario leer ciertas variables desde el teclado o imprimirlas a la pantalla, para imprimir a la pantalla se pueden invocar dos programas en la linea de comandos:


  • echo
  • printf

(que es un echo mejorado)


Y para leer desde el teclado se usa:


  • read


Si hacemos un read sin asignar variable, el dato de almacena en $REPLY una variable del sistema. Tanto el comando echo como read tienen sus propias opciones.

Ejemplos:

  1. Si creamos en una linea del Script una variable como un comando y queremos imprimir la variable a la pantalla podemos hacer algo así:
VARIABLE=`comando`
echo "$VARIABLE" 

La palabra $VARIABLE está puesta entre comillas dobles para que se imprima todo el texto ignorando los espacios entre palabras.

  1. Si escribimos en una linea del guión
read PREGUNTA

habremos creado una variable de nombre PREGUNTA así es que si luego ponemos

echo "$PREGUNTA"

Se imprimirá a la pantalla lo que se escribió en el teclado al presionar la tecla Enter.

Con los elementos tratados hasta aquí ya podemos escribir nuestros primeros guiónes

Guión 1

#!/bin/bash
echo Hola mundo

Cuando se corre este guión se imprimirá a la pantalla Hola mundo

Guión 2 Lo mismo usando una variable

#!/bin/bash
VARIABLE=Hola mundo
echo "$VARIABLE"

Nótese la variable entre comillas dobles para que imprima todo el texto.

Guión 3 Cuando se usan mas de una variable

#!/bin/bash
VARIABLE=Hola
SALUDO=mundo
echo "$VARIABLE""$SALUDO"

En los tres casos se imprimirá a la pantalla Hola mundo

Guión 4 Si se usan caracteres especiales la cosa puede cambiar

#!/bin/bash
VAR=auto
echo "Me compré un $VAR"     Imprimirá Me compré un auto
echo 'Me compré un $VAR'     Imprimirá Me compré un $VAR
echo "Me compré un \$VAR"    Imprimirá  Me compré un $VAR

Note como las comillas simples y el carácter \ hacen que Bash ignore la función del carácter especial $. Siempre las comillas simples harán que se ignore todos los meta caracteres encerrados entre ellas y \ solo el que sigue después.

Herramientas personales