BASH: Tester valeur paire vs impaire

Bonne année 2023 pour toute la «communauté» des libristes, la santé pour tous :mask: et pour le monde (du) libre :penguin:, et pour la santé de notre biosphère :herb:.


je cherche s’il existe un moyen simple de tester si une valeur est paire ou impaire.

Mon but est de transformer la sortie de lsblk en un tableau associatif, pour afficher finalement un comparatif entre les valeurs avant et après intervention.

Compteur=1
for i in $(lsblk -lo NAME,FSUSE% | egrep --color=never %)
do
if [[ $Compteur ]]
then
#Impair=clé : créer la chaine « [$i]= »

else
#Pair=valeur : créer la chaine « « $i » »

done
#Concaténer la chaine de production du tableau:

La sortie de la commande lsblk -lo NAME,FSUSE% se présente ainsi:

NAME             FSUSE%
sda3                70%
sda4                45%
mmcblk0p1           79%
VG_1-lv_home        83%
seagateUSB4T-bkp    49%

et donc un élément sur deux est alternativement une clé et une valeur du futur tableau associatif.

Merci

utilise le modulo.
X mod 2 entier => pair
X mod 2 donne un reste => impair

1 J'aime

C’est bien ce que je cherchai, mais je n’ai pas trouvé mod avec man bash.
Merci Zargos

PS, j’ai retrouvé le % (opérateur modulo)

Bonjour

mic@deb1156:~$ maVar=21; if test $(( maVar % 2 )) -eq 0; then echo "pair"; else echo "impair"; fi
impair
mic@deb1156:~$ 
mic@deb1156:~$ maVar=20; if test $(( maVar % 2 )) -eq 0; then echo "pair"; else echo "impair"; fi
pair
mic@deb1156:~$ 
mic@deb1156:~$ pairOuImpair() { test $(( $1 % 2 )) -eq 0; }     # Création d'une fonction nommée 'pairOuImpair'
mic@deb1156:~$ 
mic@deb1156:~$ pairOuImpair 21 
mic@deb1156:~$ echo $?
1
mic@deb1156:~$ 
mic@deb1156:~$ pairOuImpair 20
mic@deb1156:~$ echo $?
0
mic@deb1156:~$ 
mic@deb1156:~$ pairOuImpair 21 && echo "Pair"
mic@deb1156:~$ 
mic@deb1156:~$ pairOuImpair 20 && echo "Pair"
Pair
mic@deb1156:~$ 
mic@deb1156:~$ pairOuImpair 21 || echo "Impair"
Impair
mic@deb1156:~$ pairOuImpair 20 || echo "Impair"
mic@deb1156:~$ 

Merci MicP,
:champagne: