Programando Shell Scripts con bash: Parte 2

programando-shell-scripts-con-bash-parte-2

Programando Shell Scripts con bash: Parte 2

Redirección

La redirección es una técnica para cambiar la entrada estándar y la
salida estándar predeterminadas y por lo regular se utiliza con archivos.
Veamos esto con un pequeño ejemplo.
Tu ya sabes lo que hace el comando
echo, pero ahora vamos a hacer que en vez de escribir el
mensaje en la pantalla lo escriba a un archivo:

echo “Redireccionando la salida” > mensaje.txt

Como verás, el mensaje no salió en la pantalla ¿entonces a donde se
fue? pues muy fácil, se fue al archivo mensaje.txt compruebalo:

cat mensaje.txt

El comando cat muestra el contenido de un archivo en la salida estándar.
Para redireccionar la salida entonces se utiliza el símbolo >
seguido del nombre del archivo al que queremos redirigir la
salida.

Esto puede tener muchos usos, por ejemplo algo que utilizo muy a menudo
es juntar dos archivos en uno solo con el comando cat, si al comando
cat le especificamos dos archivos o más, los va presentar uno después del
otro en la pantalla como si se tratara de uno solo, y gracias a la
redirección es posible que en vez de mostrarlo en la pantalla lo
escriba a un archivo, así que a estas
alturas ya te deberías estar imaginando como se realiza tan
compleja operación =) pero de todos modos los vamos a ver
ejemplificado en un script.


#!/bin/bash

echo “Linea 1″ > archivo1.txt
echo “Linea 2″ > archivo2.txt
cat archivo1.txt archivo2.txt > nuevo.txt
cat nuevo.txt

¿Sencillo no? ahora seguramente te estarás preguntando qué sucede si
el archivo al que queremos escribir ya existe. Lo que sucede es que se
sobreescribe (claro, siempre y cuando tengas los permisos adecuados)
pero hay una forma de evitar esto con el comando set:

set -C

Trata ahora de escribir un mensaje con echo al archivo nuevo.txt
y verás lo que sucede.
Con el comando set se cambian varias opciones del shell, en este caso
la opción noclobber que se especifica con -C y sirve para que los archivos no se puedan sobreescribir al usar la redirección, para
desactivar noclobber es lo mismo pero con un + en vez de un -:

set +C

También se puede dar el caso de que desees añadir algo a un archivo ya
existente, esto se logra con el operador de redirección >>, por
ejemplo:


#!/bin/bash
echo “Este es un archivo ya existente” > prueba.txt
echo “Contenido de prueba.txt:”
cat prueba.txt
echo “Ahora le agregamos esta linea” >> prueba.txt

echo “Contenido después de agregarle una línea:”
cat prueba.txt

Esto es algo también muy simple que no tiene mayor complicación y no
merece mayor comentario.

La entrada también se puede redireccionar con los operadores <
y <<. Esto lo veremos más adelante dentro de un ejemplo.

Pipes

Los pipes o tuberías sirven para hacer que la salida de un programa
sea la entrada de otro y así se pueden ir encadenando varios comandos
indefinidamente. Esta es una técnica que mientras más comandos vayas
conociendo es más poderosa, además cuando estés escribiendo algo sobre
programación en bash no te quedarás sin ejemplos =). El operador de
pipe es |. Pasemos a un ejemplo:


ls -l /bin | more


Como ya deberías saber, el comando ls -l muestra los archivos que hay
en un directorio, en este caso /bin y el comando more muestra un
archivo por pantallas. Con | le indicamos que la salida de ls sea la
entrada de more.

Aquí tienes otro ejemplo para contar los archivos del directorio
actual:

ls | wc -l

El comando wc no es para ir al baño (su nombre viene de Word Count),
sirve para, entre otras cosas, contar las palabras de un archivo,
cuando no se le especifica ningún archivo toma la entrada estándar que
es este caso es la salida que produjo ls. La opción -l le indica a wc
que cuente líneas en vez de palabras. Recuerda muy bien este ejemplo,
porque vamos a estar usando unos muy parecidos.

Variables

Qué bien, por fin empezamos con algo más entretenido.
En bash no es necesario declarar las variables ni nada por el estilo
como comunmente sucede en algunos lenguajes de programación,
simplemente se les asigna un valor y listo.


#!/bin/bash

x=”Abre las compuertas por favor, Hal”
echo $x
x=”Lo siento Dave, me temo que no puedo hacer eso”
echo $x
x=10
y=$[$x+40]
echo “$x + 40 son $y”
echo -n “Escribe un número: ”
read cantidad1
echo -n “Escribe otro número: ”
read cantidad2
resultado=$[$cantidad1+$cantidad2]
echo “El resultado de sumar $cantidad1 y $cantidad2 es $resultado”

En este pequeño ejemplo se pueden observar muchas cosas interesantes,
primero, cuando se le asigna el valor a una variable se utiliza
= seguido del valor que le queremos asignar. Es muy importante
no colocar espacios entre ese símbolo y el valor. El texto se encierra
entre comillas dobles y si es un valor numérico se coloca así sin más.
Para usar el valor de una variable se escribe el símbolo
$ seguido de su nombre, así cuando bash “ve” el
símbolo $ sabe que lo que sigue es el nombre de una variable y
sustituye ese texto por el valor de la misma, por ejemplo $x
es sustituido por 10. Cuando a una variable que ya tenía algún valor
se le asigna un nuevo valor, el valor original se pierde porque es
reemplazado por el nuevo valor.

Para hacer operaciones aritmeticas encerramos entre $[] la
operación que queremos realizar, en este caso $x+40 o sea 10 + 40
porque a x le asignamos el valor 10 y el resultado será el valor de la
variable y.

¿Qué es eso de -n? la opción -n le indica a echo que no ponga una
nueva línea después del mensaje y el cursor se queda en el mismo
renglón o línea.
Para obtener un dato desde el teclado y asignárselo a una variable
usamos el comando read seguido del nombre de la variable, nótese que
no se le pone el $ a la variable porque lo que queremos es asignarle
un valor, no usar su valor.

Para las operaciones aritméticas mas básicas los operadores son:

Operador Acción
+ Sumar
- Restar
* Multiplicar
/ Dividir
( ) Agrupar

Bueno, creo que con esto ha sido suficiente por esta ocasión, ahora
con esto puedes practicar haciendo scripts más entretenidos.

Si tienes cualquier duda usa el foro dedicado a este curso (jajaja,
esta cosa ni a curso llega).


Deja un comentario