Diferencia entre revisiones de «Scripts Bash»

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
Línea 97: Línea 97:
         *)
         *)
             echo "Unknown argument: $1"
             echo "Unknown argument: $1"
            print_usage
             exit 0
             exit 0
             ;;
             ;;
Línea 103: Línea 102:
     shift
     shift
  done
  done
El while recorre todos los argumentos, aunque sólo comprueba el $1 en cada iteración, se queda con $2 y pasa al siguiente. De esta manera, el órden de los argumentos y sus opciones no es relevante.
# miscript -a opciona -b opcionb -d opciond
# miscript -b opcionb -c opcionc

Revisión del 18:13 19 nov 2012

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"
           exit 0
           ;;
   esac
   shift
done

El while recorre todos los argumentos, aunque sólo comprueba el $1 en cada iteración, se queda con $2 y pasa al siguiente. De esta manera, el órden de los argumentos y sus opciones no es relevante.

# miscript -a opciona -b opcionb -d opciond
# miscript -b opcionb -c opcionc