Scripts Bash

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

Redirecciones

$ cmd > fichero

Redirige la salida estandar a un fichero.

$ cmd 2> fichero

Redirige la salida de error a un fichero.

$ cmd >> fichero

Añade a un fichero la salida estandar sin borrar el contenido anterior.

$ cmd 2>> fichero

Añade los errores al final de un fichero.

$ cmd &> fichero

Redirige la salida estandar y la de error a un fichero.

$ cmd > fichero 2>&1

Otra manera de redirigir las dos salidas a un fichero.

$ cmd > /dev/null
$ cmd 2> /dev/null
$ cmd &> /dev/null

Descartar la salida estándar, la de error o las dos.

$ cmd < fichero

Redirige el contenido de un fichero a la entrada estandar del comando.

$ cmd << FIN 
linea1 
linea2 
FIN 

Redirige una serie de líneas a un comando. Esto se llama Here-Document. La palabra FIN sólo es para indicar el final de las líneas y puede ser cualquier otra.

$ cmd <<< "palabra"

Redirecciona el texto al comando. Se llama here-string.

$ exec 2> fichero

Redirige la salida de error a un fichero para todos los comandos.

$ exec 3< fichero

Abre un fichero para leer usando un nuevo descriptor.

$ exec 3> fichero 

Abre un fichero para escribir usando un nuevo descriptor.

$ exec 3<> fichero 

Abre un fichero para leer o escribir usando el descriptor 3.

$ exec 3>&-

Cierra un descriptor de fichero.

Variables

  • $0: Nombre del script.
  • $1,$2,$3...$9 Argumentos. En principio no se puede poner más de 9 argumentos. Si se quiere poner 10 o más, se puede recurrir al shift o poniéndolo como ${12}
  • $# Candidad de argumentos
  • $* Todos los argumentos
  • $? : a 0 si el comando anterior ha terminado sin dar error. A 1 o más si ha dado error.
  • $_ : El primer argumento del comando anterior

shift

Este comando permite usar un mismo número de argumento para ir recorriéndolos.

En este ejemplo se ve bastante bien. Via

while test -n "$1"; do
   case "$1" in
       -a)
           opciona=$2
           shift
           ;;
       -b)
           opcionb=$2
           shift
           ;;
       -c)
           opcionc=$2
           shift
           ;;
       -d)
           opciond=$2
           shift
           ;;
       *)
           echo "Unknown argument: $1"
           print_usage
           exit 0
           ;;
   esac
   shift
done