Actualizado el 21 de Marzo del 2018 (Publicado el 13 de Marzo del 2018)
1.065 visualizaciones desde el 13 de Marzo del 2018
132,7 KB
22 paginas
Creado hace 15a (28/07/2008)
Introducción a BASH
Francisco Alonso Sarría
Índice
1 Introducción
2 Operaciones con archivos
2.1 Obtener un listado de los archivos
. . . . . . . . . . . . . . . . .
2.2 Leer el contenido de un archivo . . . . . . . . . . . . . . . . . . .
2.3 Gestión de archivos . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Partición de archivos
. . . . . . . . . . . . . . . . . . . . . . . .
2.5 Concatenación de archivos . . . . . . . . . . . . . . . . . . . . .
2.6
. . . . . . . . . . . . . . . . . . . . . . . . . .
2.7
. . . . . . . . . . . . . . . . . . . . . . . . . .
2.8 Búsqueda de ayuda . . . . . . . . . . . . . . . . . . . . . . . . .
sed y grep .
.
sort
.
.
.
.
.
.
.
.
.
3 Variables
3.1 Expresiones aritméticas . . . . . . . . . . . . . . . . . . . . . . .
3.2 Expresiones lógicas . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1 Operadores de comparación numéricos
. . . . . . . . . .
3.2.2 Operadores de comparación de texto . . . . . . . . . . . .
3.2.3 Operadores lógicos con ficheros . . . . . . . . . . . . . .
3.3 Arrays .
. . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Concatenación de variables . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
1
2
4
4
5
6
6
7
7
8
9
9
10
11
11
11
12
13
13
4
Interacción con el usuario
4.1 Hacer ejecutable un script . . . . . . . . . . . . . . . . . . . . . .
4.2 Parámetros que se pasan al programa . . . . . . . . . . . . . . . .
4.3 Escribiendo texto en pantalla . . . . . . . . . . . . . . . . . . . .
4.4 Pidiendo información al usuario . . . . . . . . . . . . . . . . . .
5 Tuberias y redirecciones
6 Control del flujo
6.1 Condicionales .
.
if
.
.
.
.
. . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1
. . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2 Estructuras case . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Bucles con for
. . . . . . . . . . . . . . . . . . . . . . .
6.2.2 Bucles con while . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
6.2.3 Bucles con until
.
.
.
6.2 Bucles .
.
.
7 Funciones
1
Introducción
14
14
15
15
16
17
18
18
18
19
19
19
20
21
21
Podemos considerar a la SHELL como un entorno de trabajo que permite al usuario
lanzar programas mediante órdenes que suelen formarse con el nombre de un pro-
grama y un conjunto de opciones o parámetros.
Por ejemplo la orden:
ls -l *.tif
Producirá un listado (orden ls) de todos los ficheros con extensión tiff (parámetro
*.tif). La opción -l establece que será un listado largo, incluyendo diversas
características de los ficheros.
Una SHELL incluye, además de la posibilidad de ejecutar programas, una serie de
comandos básicos para el manejo de los archivos y directorios del ordenador, así
como herramientas diversas para procesar la información presente en los archivos.
2
La ventaja de trabajar directamente con la SHELL, en un terminal de texto, es
la flexibilidad y la posibilidad de automatizar tareas mediante scripts, pequeños
programas que incluyen varias órdenes y herramientas que permiten a aquellas
interactuar unas con otras. El precio que hay que pagar es la necesidad de aprender
un lenguaje para sacarle partido a la SHELL.
Por ejemplo, ante el problema de convertir 200 ficheros de imagen de formato
tiff a formato jpg. ¿Como se haría con un programa basado en iconos y botones?
Repitiendo 200 veces una secuencia de movimientos y pulsaciones de ratón.
¿Cómo se haría en linea de comandos? Repitiendo 200 veces una orden similar a
convert fichero.tif fichero.jpg donde fichero se sustituye cada vez
por el nombre de un fichero.
Una posibilidad sería hacer una lista de tareas, es decir escribir en un fichero de
texto 200 veces la orden y editar cada linea para poner los nombres correctos de
los ficheros.
convert fichero_1.tif fichero_1.jpg
convert fichero_2.tif fichero_2.jpg
convert fichero_3.tif fichero_3.jpg
..
convert fichero_N.tif fichero_N.jpg
A continuación bastaría con copiar y pegar estas lineas en la terminal.
Una posibilidad más inteligente es convertir la lista de tareas en un script. Asum-
iendo que queremos transformar todos los ficheros tiff del directorio de trabajo, el
siguiente script realizará el trabajo por nosotros.
..
..
for i in $(ls *.tif);do
o=$(echo $i|sed ’s/tif/jpg/’);
convert $i $o;
done
Además de ahorrarnos tecleo, este script nos ahorrará tener que estar pendientes de
que el programa haya terminado una transformación para iniciar la siguiente.
Aunque no entiendas del todo el anterior script quedate con la idea de que la
primera linea inicia un bucle y define todos los ficheros de entrada i a los que se
va a aplicar el contenido del bucle; la segunda linea genera el nombre del fichero
de salida (o) que corresponde a cada fichero de entrada sustituyendo tif por
jpg; la tercera linea ejecuta la transformación mediante una llamada al programa
convert y la cuarta cierra el bucle.
3
2 Operaciones con archivos
Un sistema operativo debe proporcionar una serie de facilidades para manejar
archivos, al menos para los archivos en formato ASCII. A continuación se exponen
las operaciones más habituales con ficheros ASCII y los comandos para ejecutarlas
en los sistemas operativos tipo Unix:
• Listado de ficheros ls
• Creación, lectura y actualización, mediante un editor como emacs, vi
• Copiar, mover, renombrar y borrar archivos, cp, mv, rm, mkdir
• Visualización cat, more, less, head, tail
• Partición del fichero en trozos split (por filas), cut (por columnas)
• Concatenación cat (por filas), join (por columnas)
• Consulta y sustitución sed, grep
• Ordenación sort
• Búsqueda de ayuda man
2.1 Obtener un listado de los archivos
El comando ls lista archivos del directorio actual (ls) o de cualquier otro (ls /bin).
Si se añade la opción -l hace el listado en formato largo, dando detalles. La salida
obtenida consta de renglones parecidos a
-rw-rw-rw- 1 pp users 138 Apr 5 19:34 leame
y se interpretan así:
• El primer carácter indica el tipo de archivo de que se trata, con esta conven-
ción:
– - archivo común,
– d directorio,
– l enlace o referencia a otro archivo.
4
• rwxrw-rw son los permisos del archivo. Los tres grupos de 3 caracteres
indican permisos para el dueño del archivo (pepe), su grupo (users) y el resto
del mundo.
– r (read) permiso para leer el archivo
– w (write) permiso para modificar o eliminar el archivo
– x (execute) si se trata de un archivo, permiso para ejecutarlo como
programa; si se trata de un directorio, permiso para ingresar en él y
recorrerlo.
• 1 cantidad de enlaces, referencias a este archivo desde otros archivos ubica-
dos en diferentes lugares.
• pepe nombre del usuario dueño del archivo.
• users nombre del grupo al que pertenece el archivo
• 138 tamaño en bytes del archivo.
• Apr 5 19:34 fecha y hora de última modificación. Si no aparece el año,
se asume el año corriente.
• leame nombre del archivo. Notar que el nombre del archivo está siempre al
final.
ls -a muestra también archivos ocultos, normalmente no visibles en el listado.
Los archivos cuyo nombre empieza con un punto son ocultos. Las entradas . y ..
representan el directorio actual y el directorio padre, respectivamente.
2.2 Leer el contenido de un archivo
El comando cat fichero muestra el contenido de fichero.
El comando more fichero presenta el fichero página a página (hay que pulsar
una tecla para pasar de página)
El comando less fichero similar a more pero con la posibilidad de ir arriba
y abajo dentro del fichero
El comando head -n fichero presenta las n primeras lineas del fichero en
pantalla
El comando tail -n fichero presenta las n últimas lineas del fichero en pan-
talla
5
2.3 Gestión de archivos
El comando cp fichero1 fichero2 copia fichero1 con el nombre fichero2.
El comando mv fichero1 fichero2 mueve o renombra fichero1 afichero2.
El comando rm fichero borra el archivo.
El comando mkdir directorio crea un nuevo directorio.
2.4 Partición de archivos
El programa split divide un fichero en varios ficheros. La opción -l n deter-
mina cuantas lineas iran a cada fichero, el parámetro prefijo determina cual
será el prefijo con el que se formarán los nombres de los ficheros de salida (se
les añadirán combinaciónes de 2 letras: aa, ab, ac,...). Suponiendo que fichero1
tiene 4500 lineas, la orden:
split -l 1000 fichero1 fich
generará 5 ficheros: fichaa, fichab, fichac,fichad, fichae. Los cuatro
primeros contendrán 1000 lineas y el último 500.
El programa cut selecciona determinadas columnas de un fichero. La opción -d
permite determinar el carácter que se utiliza como separador de columnas, la op-
ción -f permite elegir que columnas queremos extraer. La salida de cut se dirige
a la pantalla pero la podemos redirigir a un fichero.
Si el contenido de fic1 es:
1 alpha 2 azul
2 alpha 3 rojo
3 beta 3 rojo
4 gamma 2 rojo
La orden:
cut -f 2,4 -d " " fic1
producirá como salida:
alpha azul
alpha rojo
beta rojo
gamma rojo
6
2.5 Concatenación de archivos
El programa cat permite también concatenar archivos. La orden cat fichero1>>fichero2
copia el contenido de fichero1 al final de fichero2
Para concatenar archivos por columnas se utiliza join. A partir de dos ficheros
fic1 y fic2 genera una serie de lineas concatenando aquellas que tengan el
mismo valor en un determinado campo (columna) que actúa como campo clave.
Las opciones más importantes que se pueden pasar a join son:
• -1 n donde n es la columna que actuará como campo clave en el primer
fichero (por defecto es la primera).
• -2 n donde n es la columna que actuará como campo clave en el segundo
fichero (por defecto es la primera).
• -t c donde c es el carácter que se utiliza como separador de campos (por
defecto es el espacio).
2.6
sed y grep
El comando grep permite buscar las líneas que contienen una cadena de caracteres
especificada mediante una expresión regular. Lee la entrada estándar o una lista de
archivos y muestra en la salida sólo aquellas líneas que contienen la expresión
indicada. La
Comentarios de: Introducción a Bash (0)
No hay comentarios