Bonjour,
J'ai déjà un script bash sous debian bookworm.
Il a pour but de regarder certain paramètres d'intérêt de la table SMART des HDD et SSD.
Je l'ai doté d'une boucle for pour parcourir l'ensemble des périphériques type disk sur un PC.
/dev/sda
/dev/sdb
...
J'observe malheureusement que je n'ai qu'un élément dans le tableau que je récupère.
declare -a disk=$(lsblk -l -d -p -n -o NAME,TYPE | awk '($2=="disk"){print $1}')
echo "${#disk[@]}"
for d in "${disk[@]}"
do
echo "COMMENCEMENT"
echo "$d"
DISK=$d
DISK_sub="$(basename $d)"
TYPE="$(smartctl -a $DISK | grep 'Rotation Rate:' | awk '{print $3$4$5}')"
if [ "$TYPE" = "SolidStateDevice" ]; then
elif [ "$TYPE" != "SolidStateDevice" ]; then
fi
done
exit 0
Auriez-vous un conseil vis à vis de ce besoin ?
Merci beaucoup
# Variable
Posté par Chris K. . Évalué à 3 (+1/-0).
Si tu attaques ta variable en utilisant :
${disk} au lieu de ${disk[@]}
cela devrait fonctionner :)
[^] # Re: Variable
Posté par BAud (site web personnel) . Évalué à 3 (+1/-0).
et un peu de mise en forme pour agrémenter la (re-)lecture, avec ```bash au début (tu peux éditer ton entrée de forum), comme ça cela présentera quasiment comme sur pastebin :
declare
c'est nouveau en bash ? (jamais utilisé…)man bash m'indique :
pfiou, va falloir que je relise attentivement le
man
, j'y vois d'autres nouveautés (pour moi… dès les variables de l'interpréteur o_O)bon, concrètement :
$disk[@]
contient"/dev/sda\n/dev/sdb" (donc deux lignes, 1 seul élément, ce qu'affiche correctement
echo ${#disk[@]}
: 1)et pour ta boucle, comme il y a un retour chariot, j'utilise plutôt la forme :
avec une boucle while… j'ai jamais trop aimé les
for
:p[^] # Re: Variable
Posté par Chris K. . Évalué à 2 (+0/-0).
Je ne connaissais pas non plus declare, j'essaye de faire au plus simple généralement même si il très facile de se compliquer la vie avec bash.
C'est ce que je fais généralement pour parcourir un retour de commande sur plusieurs lignes, ça fonctionne mais ça pose peut être des soucis dans des cas spécifiques que je ne connais pas car je n'ai qu'une utilisation limitée des scripts bash.
Si c'est le cas et qu'il y a un spécialiste dans le coin ca m'intéresse beaucoup d'en savoir plus.
[^] # Re: Variable
Posté par BAud (site web personnel) . Évalué à 4 (+2/-0).
moui, redéfinir l'
IFS
ça pourrait éviter que lefor
prenne des espaces comme un séparateur…ce pour quoi je préfère le
while read
qui travaille ligne à ligne : si tu oublies que tu as redéfiniIFS
, tu peux avoir des soucis plus bas dans ton script dans une commande qui s'appuierait sur sa valeur habituelle…[^] # Re: Variable
Posté par Chris K. . Évalué à 2 (+0/-0). Dernière modification le 19 septembre 2024 à 17:28.
Effectivement je le set systématiquement avant un for dans mes scripts autrement, dans un script à modifier il vaut mieux penser à redéfinir l'ancienne valeur juste après pour éviter les soucis.
Le while read me parait aussi tout à fait adapté.
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.