![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Le ksh dispose de tableaux qui sont facilement utilisables. Nous allons voir comment faire.
##le script d’exemple
Le script sert à calculer l’espace occupés par les différents types de volume groupe (Oracle, systeme ..).
On va créer 3 tableaux qui vont contenir le nom du VG, son ID et la taille qu’il occupe.
La fonction oracle_type va déterminer le type du VG.
On parcourt les volumes physiques avec **lspv* et on remplit les différents tableaux
On notera que pour déclarer un tableau on utilise set -a
exemple:
set -A vg
On affiche ensuite la liste des disques, leurs tailles, leurs vgs et leurs id.
On parcourt les volumes groupes pour faire la somme de l’occupation disque.
Source du script:
#!/usr/bin/ksh
#=========================================================================
# script pour montrer l'utilisation des tableaux en ksh
#=========================================================================
set -A size
set -A vg
set -A id
cmdquery=lquerypv
header_ASM="ORCLDISK"
header_OCR="00000000 00820000 FFC00000 00000000 00000000"
header_VOTING="00000000 00220000 FFC00000 00000000 00000000"
#-------------------------------------------------------
# determine le type de disque
#-------------------------------------------------------
oracle_type
{
if [ $2 = "none" ]
then
disk=$2
header_l1=$( $cmdquery -h /dev/r$disk |head -1|cut -c 1-46)
if [ $($cmdquery -h /dev/r$disk|grep -c $header_ASM) -ne 0 ]
then
return "Disk ASM"
elif [ "$header_l1" = "$header_OCR" ]
then
return "Disk OCR Cluster"
elif [ "$header_l1" = "$header_VOTING" ]
then
return "Disk VOTING Cluster"
else
return "status"
fi
fi
}
#-------------------------------------------------------
# remplissage du tableau
# nb_elem contient le nombre d'elements du tableau
#-------------------------------------------------------
j=0
for i in $(lspv | awk '{print $1}')
do
disk[j]=$i
size[j]=$(bootinfo -s $i)
vg[j]=$(lspv | grep "$i " | awk '{ print $3}')
pvid=$(lspv | grep "$i " | awk '{ print $2}')
id[j]=oracle_type $i $pvid
let j=j+1
done
nb_elem=$j
#-------------------------------------------------------
# affiche la liste des disques, leurs tailles, leurs vgs et leurs id
#-------------------------------------------------------
echo "disk taille vg pvid"
#for j in $(awk -v nb=$nb_elem 'BEGIN { for (i=0;i<nb;i++) { print i} }')
for j in $(echo "for(i=0;i<$nb_elem;i=i+1) i" | bc)
do
echo "${disk[$j]} ${size[$j]} ${vg[$j]} ${id[$j]} "
done
#-------------------------------------------------------
# parcourt les volumes groupes pour faire la somme de l'occupation
#-------------------------------------------------------
sum_from=0
sum_to=0
# for j in $(awk -v nb=$nb_elem 'BEGIN { for (i=0;i<nb;i++) { print i} }')
# autre manière de faire
for j in $(echo "for(i=0;i<$nb_elem;i=i+1) i" | bc)
do
if [ "${vg[$j]}" == "None" ] ; then
let sum_to=sum_to+${size[$j]}
else
let sum_from=sum_from+${size[$j]}
fi
done
echo
echo "somme disques depart: $sum_from"
echo "somme disques arrivee: $sum_to"