IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Difference shell entre Linux, HP-UX et SunOS


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Par défaut 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 : 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...

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Je crains que ton script ne fonctionne pas du tout parfaitement sous Linux...

    Voici ce que fait ton script, si on enlève tout le superflu :

    Il alloue 3 variables : OS, fichier et mountfic
    Il teste la présence de $fichier dans le répertoire courant.

    Dommage, je n'ai pas de fichier appelé 'liste' dans le répertoire courant, donc il sort en erreur. Cela est indépendant du système.

    Essaie de reprendre ton script pour corriger cette erreur, et je pense que tout devrait fonctionner.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Par défaut
    De quelle erreur parles tu ?

    En tout cas sous mon Linux, ce script marchait sans problemes, depuis je l'ai modifié et il marche parfaitement sous Linux et HP-UX mais toujours pas sous SunOS !

    Ce qui marchait pas venait du "bash" que j'utilisais, comme je le pressentais pour la declaration des fonctions, la declaration que je faisais qui marchait sous Linux ne marche pas sous HP-UX, en revanche j'ai pu remarquer avec ce script que tout ce qui marchait sur HP-UX marchait sur Linux mais pas le contraire, je sais pas si c'est une generalité...

    Mon fichier "liste" n'est qu'un fichier de test, ou je met un nom de FS sur une ligne, par exemple :
    /
    /var

    Juste pour voir si mes commandes marchent bien, car le script retourne le FS monté le plus rempli, mais certains FS ne sont pas a monitorer, donc si jamais le + remplit est un de ces FS (qui doit se trouver dans un fichier externe), alors on prend le deuxieme ainsi de suite...

    Voila mon script un peu modifié, je sais pas encore quel est le probleme sous SunOS, pour l'instant j'essaye de faire marcher des commandes sur SunOS (j'ai ouvert un autre post) avec lesquelles j'ai un peu de mal...

    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
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    #!/bin/sh
    #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...
    #
    ################################################################################
     
    if [ "$1" = "mount" ]
    then
     
    #function montage()
    montage()
    {
    # On envoi le resultat de la commande dans le fichier temporraire 'fic'
    case $OS in
            Linux)
                    df > fic;;
            HP-UX)
                    mount -v | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{print $3}'  | xargs df -P > fic;;
    	SunOS)
    		mount -v | egrep "ext2|ext3|ufs|hfs|vxfs|tmpfs|psfs" | awk '{print $3}' | xargs df -k > fic;;
    esac
     
    # 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
                    # Si c'est pas le cas alors on met a la fin d'un fichier temporaire 'result' 0 sinon on met 1
                    if test `cat $fic | grep -w $ligne | wc -l` -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
    }
     
    fi
     
    # On verifie que le fichier des FS exclus existe
    if test -e $fichier
    then
    #	function listeFS()
    	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 -vw $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 $name |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 $name |awk '{ print $4}'`;;
    		mount)
    			commande=`montage`;;
    		esac
    		;;
     
    	SunOS)
    	# 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

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Par défaut
    Il y a apparement quelques differences au niveau des options de certaines commandes, mais aussi des differences entre les versions elles memes de Solaris... Sinon problemes resolus...
    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel différence entre Linux et Unix ?
    Par hamadibensassi dans le forum Distributions
    Réponses: 5
    Dernier message: 31/05/2006, 23h18
  2. Quelle solution pour partager des données entre Linux ?
    Par herzleid dans le forum Administration système
    Réponses: 5
    Dernier message: 03/04/2006, 16h19
  3. Profil itinérant entre linux
    Par litbos dans le forum Administration système
    Réponses: 5
    Dernier message: 08/01/2006, 19h26
  4. Partage d'application entre Linux et windows
    Par slc dans le forum Administration système
    Réponses: 2
    Dernier message: 30/11/2005, 11h00
  5. Partage de fichier entre Linux et Mac
    Par maddog2032 dans le forum Réseau
    Réponses: 3
    Dernier message: 14/04/2005, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo