Bonjour,

J'ai créée un script shell qui fonctionne parfaitement sous Linux, mais qui ne marche pas sous HP-UX et SunOS.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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...