Come ottimizzare uno script bash



Introduzione

Per realizzare le versioni Portable di QGIS è stato usato il seguente script bash

script iniziale

#!/bin/bash

set -x

curl http://download.osgeo.org/qgis/win64/QGIS-OSGeo4W-3.4.10-1-Setup-x86_64.exe >QGIS-OSGeo4W-3.4.10-1-Setup-x86_64.exe
7z x QGIS-OSGeo4W-3.4.10-1-Setup-x86_64.exe
mv '$_25_' OSGeo4W
mv '$PLUGINSDIR' OSGeo4W
cd OSGeo4W/bin
mv qgis-ltr.bat.tmpl qgis-ltr.bat
cd ../apps/qgis-ltr/bin
curl -L "https://github.com/pigreco/QGIS_portable_3x/raw/master/file/win64/win64.zip" >win64.zip
7z x win64.zip
rm win64.zip
cd ../../../../
7z a OSGeo4W_3410.7z OSGeo4W
  • dove occorre scrivere tre volte il nome del file da scaricare (QGIS-OSGeo4W-3.4.10-1-Setup-x86_64.exe) con potenziali errori di scrittura;
  • nell”ultima riga dello script: occorre formulare il nome (OSGeo4W_3410.7z) della cartella finale da zippare;

con le ottimizzazioni:

  • scrivo una sola volta il nome del file da scaricare assegnandola alla variabile (versione);
  • il nome della cartella finale viene estratto automaticamente facendo uso di sed che lo associa alla variabile nome;

script ottimizzato:

script ottimizzato

#!/bin/bash

set -x

versione="QGIS-OSGeo4W-3.4.15-1-Setup-x86_64.exe"
nome=$(sed -r 's/(QGIS-)(.+)(-Setup-x86_64.exe)/\2/g' <<<"$versione")
echo "$nome"

curl http://download.osgeo.org/qgis/win64/"$versione" >"$versione"
7z x "$versione"
mv '$_25_' OSGeo4W
mv '$PLUGINSDIR' OSGeo4W
cd OSGeo4W/bin
mv qgis-ltr.bat.tmpl qgis-ltr.bat
cd ../apps/qgis-ltr/bin
curl -L "https://github.com/pigreco/QGIS_portable_3x/raw/master/file/win64/win64.zip" >win64.zip
7z x win64.zip
rm win64.zip
cd ../../../../
7z a "$nome".7z OSGeo4W

Chi ha cucinato questa ricetta o ne ha tratto ispirazione