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ó