Más información sobre Shell Script: Agregar condiciones y GUI

En nuestro último artículo , repasamos algunos trucos fáciles de usar para hacer scripts de shell simples pero útiles. Ahora nos zambullimos un poco más y les añadimos algo de inteligencia.

Uso de condicionales

Si recuerda el script que escribimos la última vez, ejecutó una serie de comandos que usaron Pandoc para generar cuatro versiones de un documento Markdown (en cada uno de HTML, DOCX, ODT y ePub). Pero esto era todo o nada… o usábamos Pandoc para hacerlos uno a la vez, o todos ellos. ¿Y si quisiéramos elegir?

Esto es simple usando Condicionales, que son básicamente » si X es esto, entonces haz esto » sentencias. Echemos un vistazo al guión tal como lo teníamos:

#!/bin/bash
pandoc -r markdown -w html -o $1.html $1 &&&
pandoc -r markdown -w docx -o $1.docx $1 &&&
pandoc -r markdown -w odt -o $1.odt $1 &&&
pandoc -r markdown -w epub -o $1.epub $1

Supongamos que queremos poder elegir uno de los elementos anteriores en la línea de comandos, o hacer todos ellos. Una modificación rápida del script pandoc-pub.sh así lo logrará:

#!/bin/bash
archivo=$1
exportación=$2
si [ "$export" == "html" ]
luego
  pandoc -r markdown -w html -o $file.html $file
elif [ "$export" == "docx" ]
luego
  pandoc -r markdown -w docx -o $archivo.docx $archivo
elif [ "$export" == "odt" ]
luego
  pandoc -r markdown -w odt -o $file.odt $file
elif [ "$export" == "epub" ]
luego
  pandoc -r markdown -w epub -o $file.epub $file
fi

>

Lo primero que hicimos aquí es dar los nombres de las dos variables que queremos de la línea de comandos: (que es el archivo de origen de Markdown), y exportar (que es el formato al que queremos exportar. Así que ahora podemos elegir lo que queremos generar mediante el uso:

pandoc-pub.sh[archivo que desea convertir].md[uno de los siguientes: "html", "docx", "odt" o "epub"]

.

¿Pero qué hay de todo el tinglado? Podríamos hacerlo la última vez, ¿pero no ahora? Bueno, si pensamos un poco más adelante, deberíamos tener en cuenta un caso en el que nosotros (u otro usuario) introduzcamos algo más que las cuatro opciones anteriores – en este caso, ¿por qué no exportar todo? Añade un poco más de código de la siguiente manera:

#!/bin/bash
archivo=$1
exportación=$2
si [ "$export" == "html" ]
luego
  pandoc -r markdown -w html -o $file.html $file
elif [ "$export" == "docx" ]
luego
  pandoc -r markdown -w docx -o $archivo.docx $archivo
elif [ "$export" == "odt" ]
luego
  pandoc -r markdown -w odt -o $file.odt $file
elif [ "$export" == "epub" ]
luego
  pandoc -r markdown -w epub -o $file.epub $file
de lo contrario
  pandoc -r markdown -w html -o $file.html $file &&
  pandoc -r markdown -w docx -o $file.docx $file &&
  pandoc -r markdown -w odt -o $file.odt $file &&
  pandoc -r markdown -w epub -o $file.epub $file
fi

>

Ahora, si no escribimos nada después del nombre del archivo en la línea de comandos (o algo incorrecto), este script simplemente hará lo seguro y generará todos los formatos.

Adición de una interfaz gráfica de usuario

Pero, ¿y si, en este último caso, no quieres que lo genere todo, sino que haga algo más útil? Podríamos añadir otro

elif 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>i

para generar todos los formatos cuando se introduce «all» en la línea de comandos, y cambiar la sentencia para imprimir algún texto de ayuda:

#!/bin/bash
archivo=$1
exportación=$2
si [ "$export" == "html" ]
luego
  pandoc -r markdown -w html -o $file.html $file
elif [ "$export" == "docx" ]
luego
  pandoc -r markdown -w docx -o $archivo.docx $archivo
elif [ "$export" == "odt" ]
luego
  pandoc -r markdown -w odt -o $file.odt $file
elif [ "$export" == "epub" ]
luego
  pandoc -r markdown -w epub -o $file.epub $file
elif [ "$export" == "todos" ]
luego
  pandoc -r markdown -w html -o $file.html $file &&
  pandoc -r markdown -w docx -o $file.docx $file &&
  pandoc -r markdown -w odt -o $file.odt $file &&
  pandoc -r markdown -w epub -o $file.epub $file
de lo contrario

  echo "Por favor, añada una de las siguientes opciones después del nombre del archivo: html, odt, docx, epub, o todos."
fi

>

Pero será más útil que, en el caso de una bandera en blanco o incorrecta, mostremos una interfaz gráfica de usuario para ayudar al usuario a seguir adelante. Primero, necesitaremos instalar un conjunto de herramientas llamadas Zenity para ayudarnos. Puede instalarlo desde el Centro de software o utilizar el siguiente comando:

sudo apt-get install zenity

A continuación, tendremos que usar Zenity para crear un diálogo para nosotros. Vamos a querer algo donde el usuario pueda seleccionar todas o algunas de las opciones que tenemos disponibles…. las casillas de verificación suenan como lo correcto aquí. Así que creamos un diálogo Zenity con casillas de verificación que representan todas nuestras opciones:

#!/bin/bash
zenity --list --checklist --title="Pandoc Publisher" --column="" --column="Export Format" FALSE "html" FALSE "odt" FALSE "docx" FALSE "epub"

>

Más información sobre Shell Script: Agregar condiciones y GUI

Puedes ver como el comando Zenity de arriba es construido por leer el manual aquí . A continuación, necesitamos obtener la lista de lo que el usuario comprueba, y asignarla a una variable. Agregar un nombre de variable, y envolver el comando Zenity entre paréntesis, y agregar un signo «$» le dirá a la shell que reemplace el comando del interior con su resultado cuando haya terminado:

#!/bin/bash
choices=$(zenity --list --checklist --title="Pandoc Publisher" --column="" --column="Export Format" FALSE "html" FALSE "odt" FALSE "docx" FALSE "epub");

>»Export Formato de exportación

Ahora tenemos una variable «$choices» que contiene una lista (separada por «|» por defecto) de todas las opciones seleccionadas. Tendremos que comprobar si esa lista contiene alguno de los formatos que planeamos manejar usando «=~» en lugar de «==» (esto comprueba si algo contiene algo más, en este caso)…. por ejemplo:

if [[ $choices =~ "html" ]]

Por último, una rápida modificación del script mostrará este diálogo cuando no se proporcione ningún formato, y luego ejecutará el comando de Pandoc apropiado cuando esa opción esté seleccionada en el diálogo:

#!/bin/bash
archivo=$1
exportación=$2
si [ "$export" == "html" ]
luego
  pandoc -r markdown -w html -o $file.html $file
elif [ "$export" == "docx" ]
luego
  pandoc -r markdown -w docx -o $archivo.docx $archivo
elif [ "$export" == "odt" ]
luego
  pandoc -r markdown -w odt -o $file.odt $file
elif [ "$export" == "epub" ]
luego
  pandoc -r markdown -w epub -o $file.epub $file
elif [ "$export" == "todos" ]
luego
  pandoc -r markdown -w html -o $file.html $file &&
  pandoc -r markdown -w docx -o $file.docx $file &&
  pandoc -r markdown -w odt -o $file.odt $file &&
  pandoc -r markdown -w epub -o $file.epub $file
de lo contrario
  choices=$(zenity --list --checklist --title="Pandoc Publisher" --column="" --column="Export Format" FALSE "html" FALSE "odt" FALSE "docx" FALSE "epub");
  if [[[ $choices =~ "html" ]]
  luego
    pandoc -r markdown -w html -o $file.html $file;
  fi
  if [[ $choices =~ "odt" ]]
  luego
    pandoc -r markdown -w docx -o $archivo.docx $archivo;
  fi
  if [[ $choices =~ "docx" ]]
  luego
    pandoc -r markdown -w odt -o $file.odt $file;
  fi
  if [[ $choices =~ "epub" ]]
  luego
    pandoc -r markdown -w epub -o $file.epub $file;
  fi
fi

>

Así de fácil, una aplicación personalizada con GUI y opciones de línea de comandos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *