Volviendo un poco a nuestro ejemplo del corrector ortográfico
para pobres5.3, qué pasa cuando corremos co
si no existe el
diccionario? Pues que truena espantosamente:
comm: diccionario: No such file or directory
Es claro que debemos de tener una manera de saber de antemano si el diccionario existe y avisar nosotros de éste error o tomar una acción adecuada. Bueno, el shell nos proporciona con un mecanismo para hacer preguntas y tomar decisiones y además para averiguar cosas acerca de archivos. Vayamos por partes.
Para preguntar y tomar decisiones tenemos, como en los lenguajes de programación para gente grande, la estructura de control if-then-else que nos permite examinar una condición y tomar una acción en caso de ser cierta u otra en caso de ser falsa. La sintáxis correcta es la siguiente:
if condicion then accion_condicion_verdadera_1 accion_condicion_verdadera_2 ... else accion_condicion_falsa_1 accion_condicion_falsa_2 ... fi
Al igual que en los lenguajes de alto nivel, la parte del else puede no ir.
Para probar el valor de verdad de la parte condicionante
tenemos el comando test
. Para el ejemplo que estamos
desarrollando, de momento nos basta con saber que podemos preguntar
por la existencia de un archivo con el modificador -e
de
test
. También podemos preguntar si el tamaño del archivo es de
más de 0 carácteres, ya que no nos basta con saber que existe, sino
que además debemos de garantizar que hay palabras en el
diccionario. Esto lo podemos ver con el modificador -s
. Además,
como somos bien hechos, queremos garantizar que el archivo es legible
para el usuario ejecutando nuestro fabuloso programa, y lo podemos
saber con la opción -r
. Ahora bien, estamos hablando de tres
preguntas, test
nos permite también pegarlas con conjunciones
lógicas y
y o
con -a
y -o
respectivamente. Para este ejemplo necesitamos que las tres
condiciones se cumplan, así que utilizaremos dos conjunciones
y
. Así, luego de todas estas provisiones, podemos aumentar
nuestro programa co
de la siguiente manera:
if test -e diccionario -a -s diccionario -a -r diccionario then cat $1 | tr -c 'a-zA-Z\341\351\355\363\372\361' ' ' | \ tr ' \t' '\n' | sort | uniq | comm -23 - diccionario | more else echo "No existe el diccionario, o no lo puedo leer, o no" echo "contiene palabras." echo "Tomese dos aspirinas y llameme si persisten las molestias." fi
Ahora ya tenemos una solución para cuando hay problemas con el diccionario. No es muy buena, pero es una solución. Incluso hay gente que se gana la vida dando respuestas como éstas.
En la tabla podemos ver una lista de las
opciones de test
.