#26 Hier à 17:59
- Watael
Re : Vérifier qu'un paquet est installé ou pas : which, dpkg avec grep ?
l'indexation manuelle d'un tableau associatif indexé (à moins d'avoir des "trous") est inutile.
itmp est inutile.
imax est inutile.
seq est un programme externe inutile
for ((i=0;i<${#File[*]}; i++))
les guillemets dans le case sont très facultatifs => inutiles.
par contre, il vaut mieux mettre des guillemets autour de
${File[i]}
, où d'ailleurs (l'indice d'un tableau associatif indexé étant forcément dans un contexte arithmétique), le $ est inutile.
Dernière modification par Watael (Aujourd'hui à 00:39)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#27 Aujourd'hui à 00:28
- RaphaelG
Re : Vérifier qu'un paquet est installé ou pas : which, dpkg avec grep ?
...............
........ où d'ailleurs (l'index d'un tableau associatif étant forcément dans un contexte arithmétique), le $ est inutile.
C'est dingue ! Que tu mettes un $ ou pas, le résultat est le même.
C'est pour ça que je n'aime pas le bash.
J'ai suivi les précieuses recommandations de Watael et pour le fun (et la dernière fois, promis) je vous remets mon code :
#!/bin/bash
declare -ra File=( [0]=ghostscript [1]=ensscript [2]=unoconv [3]=ccrypt
[4]=convert [5]=pdfposter [6]=rename [7]=ffmpeg [8]=pdftk [9]=lame )
declare -ra App=( [0]=ghostscript [1]=ensscript [2]=unoconv [3]=ccrypt
[4]=imagekick [5]=pdfposter [6]=arename [7]=ffmpeg [8]=pdftk [9]=lame )
declare -ra appFormat=( [0]=d [1]=d [2]=d [3]=d [4]=d [5]=d [6]=d [7]=d [8]=s
[9]=d ) # d=Debian package, s=snap, f=flatpak, A=Appimage ...
for (( i=0; i<${#File[*]}; i++ ))
do
if ! hash "${File[i]}" >/dev/null 2>&1
then
case ${appFormat[i]} in
d ) echo "Please, install the Debian package ${App[i]}"
;;
s ) echo "Please, install the snap ${App[i]}"
;;
esac
fi
done
C'est tout pour moi. Je vous remercie de m'avoir écouté.
Hors ligne
#28 Aujourd'hui à 00:38
- Watael
Re : Vérifier qu'un paquet est installé ou pas : which, dpkg avec grep ?
il manquait une
declare -ra File=( ghostscript ensscript unoconv ccrypt
convert pdfposter rename ffmpeg pdftk lame )
pareil pour les autres déclarations de tableau indexé.
pourquoi je précise ? parce qu'il existe des tableaux associatifs :
declare -A aAr=( [a]=A [b]=B [etc]='...' )
Dernière modification par Watael (Aujourd'hui à 00:40)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#29 Aujourd'hui à 13:09
- RaphaelG
Re : Vérifier qu'un paquet est installé ou pas : which, dpkg avec grep ?
Je reformule pour être sûr que j'ai bien compris;
Si je déclare mes 3 tableaux de cette manière :
declare -ra File=( ghostscript ensscript unoconv ccrypt convert pdfposter rename
ffmpeg pdftk lame )
declare -ra App=( ghostscript ensscript unoconv ccrypt imagekick pdfposter
arename ffmpeg pdftk lame )
declare -ra appFormat=( d d d d d d d d s d )
Mon script marche aussi bien que le précédent.
J'en conclus que les indices entre crochets ne sont pas obligatoires car implicites avec l'ordre dans lequel j'initialise le contenu des cases de mon tableau .
Ai je bien compris ?
Certes, cela allège considérablement les déclarations de tableaux (non associatifs) mais, si bash s'en sort très bien, la compréhension du pauvre humain que je suis s'en trouve un peu plus compliquée. Par exemple, pour voir à quel paquet la commande rename est associée, je suis obligé de compter la position où elle est dans le tableau File puis de faire la même chose dans le tableau App pour m'apercevoir qu'elle est apportée par le paquet non éponyme arename.
Finalement je préfère préciser les indices.
Il me semble qu'il ne peut pas avoir d'ambiguité avec les tableaux associatifs qui eux, obligent d'utiliser declare avec le commutateur -A.
Hors ligne
#30 Aujourd'hui à 17:44
- Watael
Re : Vérifier qu'un paquet est installé ou pas : which, dpkg avec grep ?
tu as bien compris.
les indices si ça t'es utile, pas de problème
mais pourquoi ne pas faire un tableau associatif :
#!/bin/bash
declare -A Progs=(
[nomProgramme]='nomPaquet|format'
[etc]='et|c'
)
for nomProg in "${!Progs[@]}"
do
IFS='|' read -r nomPaquet format <<<"${Progs[$nomProg]}"
#etc
done
Dernière modification par Watael (Aujourd'hui à 17:45)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne