Difference shell entre Linux, HP-UX et SunOS
Bonjour,
J'ai créée un script shell qui fonctionne parfaitement sous Linux, mais qui ne marche pas sous HP-UX et SunOS.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
| #!/bin/bash
#set -x
################################################################################
#
# Nom: check_fs.sh
# Description: Renvoi pour le FS monte le plus rempli, le nom de celui ci
# pour le parametre "name", le pourcentage d'occupation pour le parametre
# "used" et l'espace libre pour le parametre "free"
#
################################################################################
# On recupere le type de systeme sur lequel on est dans une variable
OS=`uname -s`
# On recupere le chemin du fichier des FS a ne pas monitorer
fichier="liste"
# On recuperer le chemin du fichier des fichiers a monter (fstab)
case $OS in
SunOS)
mountfic="/etc/vfstab";;
*)
mountfic="/etc/fstab"
esac
################################################################################
#
# Nom: montage()
# Description: Retourne 1 si tous les FS devant etre monte au demarrage sont
# montes, 0 sinon...
#
################################################################################
function montage()
{
# On envoi le resultat de la commande dans le fichier temporraire 'fic'
df > fic
# On fait un premier parcours pour les entrees de 'fstab' ayant pour type de FS "ext2/ext3/ufs/hfs/vxfs/tmpfs/psfs"
cat $mountfic |egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{ print $2}' | while read ligne
do
#on fait un parcours imbrique en lisant le fichier 'fic' contenant le resultat de la commande 'df'
cat fic | awk '{ print $6}' | while read l
do
# On regarde si le FS de fstab est compris dans fic, ce qui voudrait dire qu'il est bien monte
i=$(cat $fic | grep -w $ligne | wc -l)
# Si c'est pas le cas alors on met a la fin d'un fichier temporaire 'result' 0 sinon on met 1
if test $i -eq 0
then
echo 0 >> result
else
echo 1 >> result
fi
done
done
# S'il y a un 0 dans 'result' c'est qu'il y a eu un FS qui n'est pas monte, et donc on retourne 0 sinon on retourne 1
if test $(cat result | grep -w 0 | wc -l) -eq 0
then
echo 1
else
echo 0
fi
# On efface le contenu de 'result'
rm result
}
# On verifie que le fichier des FS exclus existe
if test -e $fichier
then
function listeFS()
{
cat $1 | while read l
do
var=$var"|"$l
echo $var > monfic
done
cat monfic | sed 's/|//' monfic
rm monfic
}
listeFS=$(listeFS $fichier)
else
# listeFS="pasDeFichier"
echo "fichier inexistant"
exit
fi
################################################################################
#
# Nom: main
#
################################################################################
case $OS in
Linux)
#FS monitoring
name=`df -PT | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | sort -r -n -k 6 |awk '{ print $7}'|egrep -w -v $listeFS| head -1`
case $1 in
name)
commande=$name;;
used)
commande=`df -PT | egrep -w $name | awk '{ print $6}' | sed "s/%//g"`;;
free)
commande=`df -PT | egrep -w $name | awk '{ print $5}' | sed "s/%//g"`;;
mount)
commande=$(montage);;
esac;;
HP-UX)
# FS monitoring
name=`mount -v | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{print $3}' | xargs df -P |sort -r -n -k 5 | awk '{ print $6}' | grep -v $listeFS | head -1`
case $1 in
name)
commande=$name;;
used)
commande=`mount -v | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{print $3}' | xargs df -P | grep -w $listeFS |awk '{ print $5}' |sed "s/%//g"`;;
free)
commande=`mount -v | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{print $3}' | xargs df -P | grep -w $listeFS |awk '{ print $4}'`;;
mount)
commande=$(montage);;
esac
;;
Solaris)
# FS monitoring
name=`mount -v | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{print $3}' | xargs df -k | sort -r -n -k 5 | awk '{ print $6}' | grep -w -v $listeFS | head -1`
case $1 in
name)
commande=$name;;
used)
commande=`mount -v | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{print $3}' | xargs df -k |sort -r -n -k 5 |head -1 |awk '{ print $5}' |sed "s/%//g"`;;
free)
commande=`mount -v | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{print $3}' | xargs df -k |sort -r -n -k 5 |head -1 |awk '{ print $5}' |sed "s/%//g"`;;
mount)
commande=$(montage);;
esac
;;
esac
echo $commande |
Je voudrais savoir s'il y a beaucoup de differences entre le shell de ces 3 OS ? Est ce que la declaration de fonction varie d'un OS a l'autre ? Car ca me met une erreur a la declaration de ma premiere fonction...