Els que treballem amb GNU Linux, en el meu cas amb la distribució Debian, tenim els nostres scripts bash per executar tasques de neteja, backups… en aquest article veurem com crear un menú a Bash Script perquè ens pregunti quina tasca realitzar.

Posem un exemple clar perquè ho entenguem. Suposem que tenim el nostre script per fer les còpies de seguretat del nostre PC.

Hi ha tres maneres de fer-ho:

Un sol script que executi les compressions totes seguides. Veureu que s’aniran executant totes les ordres una darrera l’altre…

#!/bin/bash
# Fitxer backup-local.sh
AVUI=$(date +"%Y-%m-%d")

7z a -t7z /media/usuari/hddextern/$AVUI-tmp.7z /home/usuari/tmp -mx9 -pContrasenya;;
7z a -t7z /media/usuari/hddextern/$AVUI-dropbox.7z /home/usuari/Dropbox -mx9 -pContrasenya;;
7z a -t7z /media/usuari/hddextern/$AVUI-tmp.7z /home/usuari/Documentos -mx9 -pContrasenya;;
7z a -t7z /media/usuari/hddextern/$AVUI-android.7z /home/usuari/AndroidStudio -mx9 -pContrasenya;;

Un script per cada compressió que necessitem: un script per comprimir la carpta X, un altre script per comprimir la carpeta Y…

O, el que veurem, un sol script que et deixi escollir quina tasca fer.

Crear menú bash script

El que farem és un script que mostri un menú senzill, on ens deixi escollir quina opció realitzar:

Aquí teniu el codi que ho fa possible:

#!/bin/bash
AVUI=$(date +"%Y-%m-%d")
echo "[ Selecciona opció de Backup]"
echo "1: tmp"
echo "2: dropbox"
echo "3: documents"
echo "4: android"

# llegim del teclat
read n

case $n in
        1) 7z a -t7z /media/usuari/hddextern/$AVUI-tmp.7z /home/usuari/tmp -mx9 -pContrasenya;;
        2) 7z a -t7z /media/usuari/hddextern/$AVUI-dropbox.7z /home/usuari/Dropbox -mx9 -pContrasenya;;
        3) 7z a -t7z /media/usuari/hddextern/$AVUI-tmp.7z /home/usuari/Documentos -mx9 -pContrasenya;; 
        4) 7z a -t7z /media/usuari/hddextern/$AVUI-android.7z /home/usuari/AndroidStudio -mx9 -pContrasenya;;
        *) echo "Opció incorrecta";;
esac

Millorem en dues coses:

  • Ho tenim tot en un sol script, i no tenim perquè executar totes les ordres una darrera l’altra.
  • Per executar les sentències per separat, si no ho fem amb un menú, hauríem de tenir un fitxer bash script per a cada ordre… no té sentit.

Però encara ho podem fer una mica més complicat

Crear menú bash script avançat

Si la versió anterior se us queda una mica curta, podeu ficar-vos en aquest altra versió molt més complicada:

#!/bin/bash
AVUI=$(date +"%Y-%m-%d")

PS3= "[ Selecciona opció de Backup]"
options=("1" "2" "3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        1) 7z a -t7z /media/usuari/hddextern/$AVUI-tmp.7z /home/usuari/tmp -mx9 -pContrasenya;;
        2) 7z a -t7z /media/usuario/hddextern/$AVUI-dropbox.7z /home/usuari/Dropbox -mx9 -pContrasenya;;
        3) 7z a -t7z /media/usuari/hddextern/$AVUI-tmp.7z /home/usuario/Documentos -mx9 -pContrasenya;; 
        4) 7z a -t7z /media/usuari/hddextern/$AVUI-android.7z /home/usuari/AndroidStudio -mx9 -pContrasenya;;
        "Quit") break;;
        *) echo "Opció incorrecta";;
    esac
done

Proveu, i utilitzeu la que més s’adapti a les vostres necessitats.

Esperem que us sigui d’utilitat


Més informació