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 :

Vos scripts shell


Sujet :

Shell et commandes GNU

  1. #61
    Membre à l'essai Avatar de Pierrot le fou
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 7
    Points : 12
    Points
    12
    Par défaut
    Salut,

    Citation Envoyé par N_BaH Voir le message
    késako if ${var+"true"} ?
    Cela me dit que la variable $PID_hor a une valeur (elle n'est définie - et donc n'a une valeur - que si le script horloge.sh est présent sur le répertoire).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # if ${var+"false"}; then  echo "var non definie"; else echo "var definie"; fi
    var non definie
    # var="y"
    # if ${var+"false"}; then  echo "var non definie"; else echo "var definie"; fi
    var definie
    # unset var
    # if ${var+"false"}; then  echo "var non definie"; else echo "var definie"; fi
    var non definie
    Pierre.

  2. #62
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    J'utilise ça:
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function _is_set()
    {
        # [[ -v $1 ]] with bash 4.2+
        [[ -n ${!1+x} ]]
    }


    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $> _is_set toto && echo "set" || echo "unset"
    unset
     
    $> toto=42 _is_set toto && echo "set" || echo "unset"
    set
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #63
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Cela me dit que la variable $PID_hor a une valeur
    c'est très bizarre que ça fonctionne, puisque la syntaxe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi
    or, le développement d'une variable ne constitue pas une commande.

    c'est un comportement étrange du shell qui considère qu'il y aura forcément une commande après if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var=azerty
    if $var; then echo ok; else echo ko; fi
    bash: azerty : commande introuvable
    ko


    la manière traditionnelle (et donc la plus lisible) est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if test -n "$var" #avec des guillemets, sinon test pourrait ne tester que la chaîne -n, qui existe toujours !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #64
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 286
    Points : 12 742
    Points
    12 742
    Par défaut
    Bonjour,

    Par contre, cela ne peut fonctionner qu'avec false, car avec true:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ unset XX
    $ if ${XX+"true"} ;  then echo ko ; else echo ok ; fi
    ko
    $ XX=0
    $ if ${XX+"true"} ;  then echo ko ; else echo ok ; fi
    ko
    $ XX=1
    $ if ${XX+"true"} ;  then echo ko ; else echo ok ; fi
    ko
    Ce qui est normal, puisque soit la variable est défini, soit on ramène true (donc dans tous les cas on a vrai
    Et la bonne syntaxe est ${XX:+"false"}
    Cordialement.

  5. #65
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Avec le ':' en plus, ce qui est testé c'est si la variable est non vide, pas si elle est définie. Et effectivement, on dirait qu'il y a des effets de bords bizarres qui font que ça marche.

    Bref, si votre bash est assez récent, -v, c'est bien! C'est fait pour.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #66
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Nom du script: test-variable-substitution.sh

    Compatible avec: sh, ksh, bash

    Descriptif: permet de se rappeler comment fonctionne la substitution de variable avec les options '-' ':-' '+' ':+'

    Pré-requis: aucun

    Code:
    Code shell : 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
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    #!/bin/sh
     
    _JD_TVS_timeStamp="Time-stamp: <2017/08/05 12:00:00 jack (sokobania)>"
    _JD_TVS_timeStamp=$(expr "${_JD_TVS_timeStamp}" : '.*\(<.*>\).*')
     
    #================================================================
    # Name  : test-variable-substitution.sh
    # Author: Jack (sokobania)
    # Desc  : Script to help remmeber shell variable substitution and common tests
    # ------
    #
    # Usage : test-variable-substitution.sh
    # -----
    #
    # Compatible with: sh, ksh, bash
    # ---------------
    #
    # Requirements: none
    # ------------
    #
    #================================================================
     
    # Raise an error when attempting to read an unset variable
    set -u
     
    # Make sure 'UUU' is unset
    unset UUU
     
    # Create an empty var 'EEE'
    EEE=''
     
    # Create a set var 'SSS'
    SSS='X'
     
    cat <<EOF
    Note:
    A variable is said to be 'unset', when it has not yet been set or has been explicitely unset: unset V
    A variable is said to be 'empty', when it is set to the empty string: V='' or V=
    A variable is said to be 'set', when it is set to a non-empty string: V='X'
    EOF
     
    # Indirect test (by Luc Hermitte)
    # [[ -v $1 ]] with bash 4.2+
    function _is_set() { [[ -n ${!1+x} ]]; }
     
    # Title
    printf '\n+=======================+=========+=========+=========+'
    printf "\n| %-21s | %-7s | %-7s | %-7s |" 'Instruction' 'unset V' " V=''" " V='X'"
    printf '\n+-----------------------+---------+---------+---------+'
    printf "\n| %-21s | %-7s | %-7s | %-7s |" 'State of V' 'unset' ' empty' ' set'
    printf '\n+=======================+=========+=========+=========+'
     
    # ${V-D}
     
    t=$(echo '"${V-D}"')
    u=$(echo "${UUU-D}")
    e=$(echo "${EEE-D}")
    s=$(echo "${SSS-D}")
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "'$u'  " "'$e'  "  "'$s'  "
    printf '\n+-----------------------+---------+---------+---------+'
     
    # ${V:-D}
     
    t=$(echo '"${V:-D}"')
    u=$(echo "${UUU:-D}")
    e=$(echo "${EEE:-D}")
    s=$(echo "${SSS:-D}")
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "'$u'  " "'$e'  "  "'$s'  "
    printf '\n+-----------------------+---------+---------+---------+'
     
    # ${V+D}
     
    t=$(echo '"${V+D}"')
    u=$(echo "${UUU+D}")
    e=$(echo "${EEE+D}")
    s=$(echo "${SSS+D}")
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "'$u'  " "'$e'  "  "'$s'  "
    printf '\n+-----------------------+---------+---------+---------+'
     
    # ${V:+D}
     
    t=$(echo '"${V:+D}"')
    u=$(echo "${UUU:+D}")
    e=$(echo "${EEE:+D}")
    s=$(echo "${SSS:+D}")
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "'$u'  " "'$e'  "  "'$s'  "
    printf '\n+=======================+=========+=========+=========+'
     
    # unset : test -z ${V+D}
     
    t=$(echo 'test -z "${V+D}"')
    u=$(if test -z "${UUU+D}"; then echo 'true '; else echo 'F   '; fi)
    e=$(if test -z "${EEE+D}"; then echo 'true '; else echo 'F   '; fi)
    s=$(if test -z "${SSS+D}"; then echo 'true '; else echo 'F   '; fi)
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "$u" "$e"  "$s"
    printf ' unset'
    printf '\n+-----------------------+---------+---------+---------+'
     
    # empty : test -z "${V-D}"
     
    t=$(echo 'test -z "${V-D}"')
    u=$(if test -z "${UUU-D}"; then echo 'true '; else echo 'F   '; fi)
    e=$(if test -z "${EEE-D}"; then echo 'true '; else echo 'F   '; fi)
    s=$(if test -z "${SSS-D}"; then echo 'true '; else echo 'F   '; fi)
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "$u" "$e"  "$s"
    printf ' empty (set to empty)'
    printf '\n+-----------------------+---------+---------+---------+'
     
    # set : test -n ${V:+D}
     
    t=$(echo 'test -n "${V:+D}"')
    u=$(if test -n "${UUU:+D}"; then echo 'true '; else echo 'F   '; fi)
    e=$(if test -n "${EEE:+D}"; then echo 'true '; else echo 'F   '; fi)
    s=$(if test -n "${SSS:+D}"; then echo 'true '; else echo 'F   '; fi)
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "$u" "$e"  "$s"
    printf ' set (but not empty)'
    printf '\n+=======================+=========+=========+=========+'
     
    # not unset : test -n ${V+D}
     
    t=$(echo 'test -n "${V+D}"')
    u=$(if test -n "${UUU+D}"; then echo 'true '; else echo 'F   '; fi)
    e=$(if test -n "${EEE+D}"; then echo 'true '; else echo 'F   '; fi)
    s=$(if test -n "${SSS+D}"; then echo 'true '; else echo 'F   '; fi)
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "$u" "$e"  "$s"
    printf ' not unset (set or empty)'
    printf '\n+-----------------------+---------+---------+---------+'
     
    # not empty : test -n "${V-D}"
     
    t=$(echo 'test -n "${V-D}"')
    u=$(if test -n "${UUU-D}"; then echo 'true '; else echo 'F   '; fi)
    e=$(if test -n "${EEE-D}"; then echo 'true '; else echo 'F   '; fi)
    s=$(if test -n "${SSS-D}"; then echo 'true '; else echo 'F   '; fi)
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "$u" "$e"  "$s"
    printf ' not empty (unset or set)'
    printf '\n+-----------------------+---------+---------+---------+'
     
    # not set : test -z ${V:+D}
     
    t=$(echo 'test -z "${V:+D}"')
    u=$(if test -z "${UUU:+D}"; then echo 'true '; else echo 'F   '; fi)
    e=$(if test -z "${EEE:+D}"; then echo 'true '; else echo 'F   '; fi)
    s=$(if test -z "${SSS:+D}"; then echo 'true '; else echo 'F   '; fi)
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "$u" "$e"  "$s"
    printf ' not set (unset or empty)'
    printf '\n+=======================+=========+=========+=========+'
     
    # unset : test "${V-A}${V-B}" = "AB"
     
    t=$(echo '"${V-A}${V-B}" = "AB"')
    u=$(if test "${UUU-A}${UUU-B}" = "AB"; then echo 'true '; else echo 'F   '; fi)
    e=$(if test "${EEE-A}${EEE-B}" = "AB"; then echo 'true '; else echo 'F   '; fi)
    s=$(if test "${SSS-A}${SSS-B}" = "AB"; then echo 'true '; else echo 'F   '; fi)
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "$u" "$e"  "$s"
    printf ' unset'
    printf '\n+=======================+=========+=========+=========+'
     
    # set : _is_set 'V'
     
    t=$(echo "_is_set 'V'")
    u=$(if _is_set UUU; then echo 'true '; else echo 'F   '; fi)
    e=$(if _is_set EEE; then echo 'true '; else echo 'F   '; fi)
    s=$(if _is_set SSS; then echo 'true '; else echo 'F   '; fi)
     
    printf "\n| %-21s | %7s | %7s | %7s |" "$t" "$u" "$e"  "$s"
    printf ' set (or empty)'
    printf '\n+=======================+=========+=========+=========+'
     
    # Last line
     
    printf '\n'
     
    # Treat 1st case as special
     
    unset l
    for x in a "b c" d "" e
    do l=${l+${l}_}${x}
    done
     
    printf "\n%s => '%s'" 'unset l; for x in a "b c" d "" e; do l=${l+${l}_}${x}; done' "$l"
     
    unset l
    for x in "" a "b c" d "" e
    do l=${l+${l}_}${x}
    done
     
    printf "\n%s => '%s'" 'unset l; for x in "" a "b c" d "" e; do l=${l+${l}_}${x}; done' "$l"
     
    printf "\n\nok\n"
     
    exit 0

    Et le résultat:

    Note:
    Une variable est dite 'unset', quand on ne lui a pas encore affecté de valeur ou qu'elle a été explicitement désaffectée: unset V.
    Une variable est dite 'empty', quand on lui a affecté une chaîne vide: V= ou V=''.
    Une variable est dite 'set' quand on lui a affecté une valeur non-vide: V=X ou V='X'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    +=======================+=========+=========+=========+
    | Instruction           | unset V |  V=''   |  V='X'  |
    +-----------------------+---------+---------+---------+
    | State of V            | unset   |  empty  |  set    |
    +=======================+=========+=========+=========+
    | "${V-D}"              |   'D'   |    ''   |   'X'   |
    +-----------------------+---------+---------+---------+
    | "${V:-D}"             |   'D'   |   'D'   |   'X'   |
    +-----------------------+---------+---------+---------+
    | "${V+D}"              |    ''   |   'D'   |   'D'   |
    +-----------------------+---------+---------+---------+
    | "${V:+D}"             |    ''   |    ''   |   'D'   |
    +=======================+=========+=========+=========+
    Et quelques tests:

    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
    +=======================+=========+=========+=========+
    | Instruction           | unset V |  V=''   |  V='X'  |
    +-----------------------+---------+---------+---------+
    | State of V            | unset   |  empty  |  set    |
    +=======================+=========+=========+=========+
    | test -z "${V+D}"      |   true  |    F    |    F    | unset
    +-----------------------+---------+---------+---------+
    | test -z "${V-D}"      |    F    |   true  |    F    | empty (set to empty)
    +-----------------------+---------+---------+---------+
    | test -n "${V:+D}"     |    F    |    F    |   true  | set (but not empty)
    +=======================+=========+=========+=========+
    | test -n "${V+D}"      |    F    |   true  |   true  | not unset (set or empty)
    +-----------------------+---------+---------+---------+
    | test -n "${V-D}"      |   true  |    F    |   true  | not empty (unset or set)
    +-----------------------+---------+---------+---------+
    | test -z "${V:+D}"     |   true  |   true  |    F    | not set (unset or empty)
    +=======================+=========+=========+=========+
    | "${V-A}${V-B}" = "AB" |   true  |    F    |    F    | unset
    +=======================+=========+=========+=========+
    | _is_set 'V'           |    F    |   true  |   true  | set (or empty)
    +=======================+=========+=========+=========+
    Et un dernier petit rappel:

    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    unset l
    for x in a "b c" d "" e;
    do l=${l+${l}_}${x};
    done
    => 'a_b c_d__e'
     
    unset l
    for x in "" a "b c" d "" e
    do l=${l+${l}_}${x}
    done
    => '_a_b c_d__e'

    Ce dernier n'est pas destiné à être utilisé tel quel (sinon on ferait mieux d'utiliser IFS et echo). C'est plus un "pattern" à utiliser pour gérer une liste avec un traitement particulier pour la première itération (il y a un intervalle de moins que de poteaux).

  7. #67
    Nouveau membre du Club Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Points : 32
    Points
    32
    Par défaut Le fameux script pavé
    Bonjour bonjour,
    voici un script (c'était mon tout premier script) qui utilise rsync sur centos.

    NOM DU SCRIPT : backup_ganil.sh

    COMPATIBLE : avec bash

    Descriptif : permet le backup d'un serveur à un autre

    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
    #!/bin/sh
     
    volumes=$(cut -d' ' /etc/auto.netapp -f1)
     
            if ! mount | grep /dev/vd
            then    echo "WARNING !! DELL storage not mounted !"; exit
            fi
     
    declare -A VOLS
    running_rsync=`pgrep -a rsync | cut -d ' ' -f 7`
     
    for rrsync in $running_rsync
    do
           #VOLS[$rrsync]=1
    done
     
    for K in "${!VOLS[@]}"
    do
           echo $K
    done
            echo "${#VOLS[@]}"
     
    if [ "${#VOLS[@]}" -gt 1 ]; then
    echo "rsync is running, exit"; exit
    else echo "rsync is not running"
    fi
     
    #VARS
    test=$1
    if [ $# -eq 0 ] ; then
     
    for vol in $volumes
    do
     
    if [ ! -f "/root/backup_logs/$vol.log" ]; then
     
            ls /netapp/$vol > /dev/null 2>&1
     
            if [ $? -gt 0 ]; then
                    echo $vol non disponible
                    continue
            fi
     
            echo $vol
     
            # to do : évaluer la taille qu'il reste sur la partition
            # premier backup pour ce volume, questionner l'utilisateur sur la partition
            PS3="Sur quel serveur installer la sauvegarde ? "
            select rep in r740disks md1400_1 exit
     
            do
            case $rep in
            r740disks) break;;
            md1400_1) break;;
            exit) exit;;
            esac
            done
     
            echo $rep > /root/backup_logs/$vol.log
     
            destsize=`df | grep $rep | awk '{ print $4 }'`
            destsizeh=`df -h | grep $rep | awk '{ print $4 }'`
            sourcesize=`df | grep $vol | awk '{ print $3 }'`
            sourcesizeh=`df -h | grep $vol | awk '{ print $3 }'`
            sourcesize2=`df -h | grep $vol | awk '{ print $2 }'`
            echo source : $vol $sourcesizeh/$sourcesize2 "|" destination : $rep $destsizeh
            if [ $sourcesize -gt $destsize ]
            then echo "Destination trop petite !" exit;
            fi
            source="/netapp/$vol"
            dest="/mnt/$rep/volumes/"
            cmd="rsync -ah -e ssh --exclude=.snapshot $source $dest 2>> /root/backup_logs/$vol.log"
            mail -s "Backup NFS Ganil" toto@hotmail.fr <<< "La copie s'effectue de $source vers $dest."
            echo $cmd
            eval $cmd
            mail -s "Backup NFS Ganil" toto@hotmail.fr  <<< "La copie de $source vers $dest est terminée !"
            exit
    fi
    done
     
    elif [ "$test" == "schedule" ] ; then
     
    #liste le fichier le plus vieux du répertoire
    old=`ls -t /root/backup_logs/ | tail -1`
    old=${old:0:-4}
    echo Incrémentale de $old
    rep=`sed -n 1p /root/backup_logs/$old.log`
    source="/netapp/$old"
    dest="/mnt/$rep/volumes/"
    echo Destination : $rep
            if [ -d "$dest" ]; then
                    cmd="rsync -ah -e ssh --exclude=.snapshot $source $dest 2>> /root/backup_logs/$old.log"
                    mail -s "Backup NFS Ganil" toto@hotmail.fr <<< "La copie s'effectue de $source vers $dest"
     
                    echo $cmd
                    eval $cmd
     
                    mail -s "Backup NFS Ganil" toto@hotmail.fr <<< "La copie de $source vers $dest est terminée !"
            else
                    echo "Le répertoire $dest n'est pas présent, vous allez sortir" exit;
            fi
    fi
    NOM DU SCRIPT : backup_ganil_cifs.sh

    COMPATIBLE : powershell

    Descriptif : permet le backup d'un serveur à un autre

    Et le voici mais avec robocopy :

    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
    160
    161
    # SCRIPT PARAM
    param([string] $arg1)
     
    #VARS
    $expediteur = "titi@hotmail.fr"
    $destinataire = "toto@hotmail.fr"
    $serveur = "mail.toto.fr"
     
    #Robocopy est en marche ou pas ?
    $programName = "robocopy"
    $isRunning = (Get-Process | Where-Object { $_.Name -eq $programName }).Count -gt 1
     
    if ($isRunning)
    {
    	echo "ROBOCOPY IS RUNNING, exiting..." ; exit
    	echo "ROBOCOPY IS RUNNING, exiting..." | Out-File -FilePath C:\Users\bckcifs\Desktop\robocopy_out.txt
    }
    else 
    {
    	echo "ROBOCOPY IS NOT RUNNING !" 
    	echo "ROBOCOPY IS NOT RUNNING !" | Out-File -FilePath C:\Users\bckcifs\Desktop\robocopy_out.txt
    }
     
    # liste des volumes
    $volumes = New-Object 'System.Collections.Generic.Dictionary[String,String]'
    $fichier = "C:\Users\bckcifs\Desktop\cifs_volumes.txt"
    $fichiercontenu = get-content $fichier
     
    foreach($source in $fichiercontenu)
    {
    	$dum,$dum2,$server,$vol = $source.split("\\")	
    	$volumes.Add($vol, $source)
    }
     
    # VERSION INTERACTIVE
    if([string]::IsNullOrEmpty($arg1))
    {
    	foreach($volume in $volumes.GetEnumerator())
    	{		
    		$vol = $volume.Key
    		$source = $volume.Value
     
    		#Vérifier la présence des fichiers de log des volumes :
    		if (Test-Path("C:\Users\bckcifs\Desktop\backups_logs\$vol.log"))
    		{	
    			continue;							
    		}
    		else 
    		{
    			Write-Host $source
     
    			if([string]::IsNullOrEmpty($source) -or(-Not (Test-Path("$source"))) ) { echo "$source Introuvable"; continue; }
     
    			# tester taille volumes : 
    			# test montage destination
     
    			$dest=Read-Host "Choisissez une destination : [1] (E:\volumes) | [2] (Z:\)"
    			Switch ($dest)
    			{
    				1 { $dest="E:\volumes" }
    				2 { $dest="Z:\" }					
    			}
     
     
    			if([string]::IsNullOrEmpty($dest) -or (-Not (Test-Path("$dest"))) ) { echo "Destination introuvable"; exit }
     
    			$dest+="\$vol"	
     
    			$dest > C:\Users\bckcifs\Desktop\backups_logs\$vol.log 
     
     
    			#MAIL DEBUT		
    			$objet = "Backup CIFS Ganil  " + (Get-Date -format 'd MM yyyy')
    			$texte = "La copie s'effectue de $source vers $dest"
    			$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
    			$SMTPclient = new-object System.Net.Mail.SmtpClient $serveur
    			$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
    			$SMTPclient.Send($message)
     
    			$cmd = "robocopy $source $dest /XD '.bplusvtoc' '.vtoc' '.snapshot' /R:0 /W:0 /TEE /NP /MIR /SEC /SECFIX /NJS /NJH /NDL /NFL /NC /NS /UNILOG+:C:\Users\bckcifs\Desktop\backups_logs\$vol.log"
    			echo $cmd
    			iex $cmd
     
    			#MAIL FIN	
    			$logfile1 = "C:\Users\bckcifs\Desktop\backups_logs\$vol.log"
    			$objet = "Backup CIFS Ganil  " + (Get-Date -format 'd MM yyyy')
    			$texte = "La copie $source vers $dest est terminée."
    			$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
    			$attachment = new-object System.Net.Mail.Attachment $logfile1
    			$message.Attachments.Add($attachment)
    			$SMTPclient = new-object System.Net.Mail.SmtpClient $serveur
    			$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
    			$SMTPclient.Send($message) 
     
    			exit
    		}
    	}
     
    }	# fin version interactive
    elseif($arg1 -eq "schedule")
    {
     
    	Write-Output "$(Get-Date -format 'd/MM/yyyy')" | Out-File -FilePath C:\Users\bckcifs\Desktop\robocopy_out.txt
     
    	#Comparer les dates des fichiers et sortir le plus anciens
    	$date1 = ''
    	$oldest = ''
    	$olddate = ''
     
    	foreach ($vol in Get-ChildItem -Path "C:\Users\bckcifs\Desktop\backups_logs\" *.log -File)
    	{		
     
    		if (!$olddate) { $oldest = $vol.Name; $olddate = $vol.LastWriteTime.ToString("yyyy-MM-dd H:m:s");}  
    		else
    		{
    			if ($vol.LastWriteTime.ToString("yyyy-MM-dd H:m:s") -lt $olddate)
    			{ 						
    				$oldest = $vol.Name; 
    				$olddate =  $vol.LastWriteTime.ToString("yyyy-MM-dd H:m:s")				
    			}
    		}		
    	}
     
    	$oldvol = $oldest.Split(".")
    	$src = $volumes[$oldvol]
    	$dest = (Get-Content -Path C:\Users\bckcifs\Desktop\backups_logs\$oldest -totalcount 1)
     
    	if( [string]::IsNullOrEmpty($src) -or (-Not (Test-Path("$src"))) ) { echo "Source Introuvable"; exit }
    	if( [string]::IsNullOrEmpty($dest) -or (-Not (Test-Path("$dest"))) )	{ echo "Destination introuvable"; exit }
     
    	$dest > C:\Users\bckcifs\Desktop\backups_logs\$oldest
    	$olddate >> C:\Users\bckcifs\Desktop\backups_logs\$oldest 
     
     
    	# MAIL DEBUT DE SAUVEGARDE
    	$objet = "Backup CIFS Ganil " + (Get-Date -format 'd MM yyyy')
    	$texte = "La copie s'effectue de $src vers $dest"
    	$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
    	$SMTPclient = new-object System.Net.Mail.SmtpClient $serveur
    	$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
    	$SMTPclient.Send($message)
     
    	# ROBOCOPY
    	$cmd = "robocopy $src $dest /XD '.bplusvtoc' '.vtoc' '.snapshot' /R:0 /W:0 /E /TEE /NP /MIR /SEC /SECFIX /NJS /NJH /NDL /NFL /NC /NS /UNILOG+:C:\Users\bckcifs\Desktop\backups_logs\$oldest"
    	echo $cmd
    	echo "Debut de la sauvegarde auto..." $cmd >> C:\Users\bckcifs\Desktop\robocopy_out.txt	
    	iex $cmd
     
    	# MAIL FIN
    	$logfile = "C:\Users\bckcifs\Desktop\backups_logs\$oldest"
    	$objet = "Backup CIFS Ganil  " + (Get-Date -format 'd MM yyyy')
    	$texte = "La copie de $src vers $dest est terminée."
    	$message = new-object System.Net.Mail.MailMessage $expediteur, $destinataire, $objet, $texte
    	$attachment = new-object System.Net.Mail.Attachment $logfile
    	$message.Attachments.Add($attachment)
    	$SMTPclient = new-object System.Net.Mail.SmtpClient $serveur
    	$SMTPclient.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
    	$SMTPclient.Send($message)
     
    	echo "Fin de sauvegarde" >> C:\Users\bckcifs\Desktop\robocopy_out.txt
    }
    CDLT
    Il faut apprendre, non pas pour l'amour de la connaissance, mais pour se défendre contre le mépris dans lequel le monde tient les ignorants.

    Apprendre sans réfléchir est vain. Réfléchir sans apprendre est dangereux.



    Oh et allez checker pour plein d'amour pour le jeux vidéal : https://www.instant-gaming.com/igr/derisoir/
    Cordialement.

  8. #68
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    tu ne peux pas utiliser /bin/sh ET des tableaux.
    et ==, non plus, n'est pas POSIX

    le tableau associatif et les tripotages relatifs sont inutiles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nb2rsync=$(pgrep -c rsync)
    if test $nb2rsync -gt 1
    ...
    grep | awk aussi est inutile : awk gère les regex !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #69
    Nouveau membre du Club Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Je ne peux pas utiliser de tableau ?? cette fonction marche très bien et à était vérifier par mon DSI puis le script est en production sur les serveurs maintenant et aucun problème de se côtés la. Le rsync ne peut être lancer plus de deux fois.

    Et peut-être que c'est moi qui devient fou mais où a tu vus des "==" ???? J'ai relus plusieurs fois mon script mais pas vue et je ne me souviens pas du tout avoir misa ça.

    Je test quand même la solution !
    Il faut apprendre, non pas pour l'amour de la connaissance, mais pour se défendre contre le mépris dans lequel le monde tient les ignorants.

    Apprendre sans réfléchir est vain. Réfléchir sans apprendre est dangereux.



    Oh et allez checker pour plein d'amour pour le jeux vidéal : https://www.instant-gaming.com/igr/derisoir/
    Cordialement.

  10. #70
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    non. /bin/sh ne supporte pas les tableaux.
    sur vos machines /bin/sh est probablement un lien vers /bin/bash , mais ce n'est pas toujours le cas, et alors le script ne fonctionnera plus.
    il faut adapter le shebang pour que le noyau utilise bien bash.

    == ligne 81
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #71
    Nouveau membre du Club Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Donc je dois simplement remplacer sh par bash ?

    Effectivement le double égale est présent. Mais un seul égale fera marcher l'histoire ?

    Je pose les questions avant car comme je l'ai dit c'est en production
    Il faut apprendre, non pas pour l'amour de la connaissance, mais pour se défendre contre le mépris dans lequel le monde tient les ignorants.

    Apprendre sans réfléchir est vain. Réfléchir sans apprendre est dangereux.



    Oh et allez checker pour plein d'amour pour le jeux vidéal : https://www.instant-gaming.com/igr/derisoir/
    Cordialement.

  12. #72
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    oui, ou alors tu rends ton script strictement POSIX.
    et oui.
    le double égal n'a de "sens" que entre [[ ]] pour exprimé l'usage de tests avancés introduits par les crochets doubles.
    c'est aussi une extensions de bash.

    EDIT:
    vérifié par mon DSI
    pfff.
    je ne demanderais pas à mon fils qui conduit un engin de chantier (pourtant équipé un marteau pneumatique) de regarnir la tapisserie de mon fauteuil Voltaire.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #73
    Nouveau membre du Club Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    pfff.
    je ne demanderais pas à mon fils qui conduit un engin de chantier (pourtant équipé un marteau pneumatique) de regarnir la tapisserie de mon fauteuil Voltaire.
    Je trouve cette réponse un peu.... Il faut bien commencer pour apprendre évidement le script peut toujours être améliorer. Et il faut avoir confiance

    Merci pour les réponse j'ai déjà changer pour le "==" mais je comprend toujours pas pourquoi pour le tableau désolé

    il faut évidement aussi expliquer pour certains qui ont du mal à comprendre, ce n'est pas toujours évident.
    Il faut apprendre, non pas pour l'amour de la connaissance, mais pour se défendre contre le mépris dans lequel le monde tient les ignorants.

    Apprendre sans réfléchir est vain. Réfléchir sans apprendre est dangereux.



    Oh et allez checker pour plein d'amour pour le jeux vidéal : https://www.instant-gaming.com/igr/derisoir/
    Cordialement.

  14. #74
    Nouveau membre du Club Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Ah les jeunes... fougueux, déterminé... parfois trop, d'où le pourquoi de l'incompréhension de certaine choses parfois évidente pour d'autre.
    Il faut apprendre, non pas pour l'amour de la connaissance, mais pour se défendre contre le mépris dans lequel le monde tient les ignorants.

    Apprendre sans réfléchir est vain. Réfléchir sans apprendre est dangereux.



    Oh et allez checker pour plein d'amour pour le jeux vidéal : https://www.instant-gaming.com/igr/derisoir/
    Cordialement.

  15. #75
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    je vise le DSI qui a des compétences trop importantes pour juger de la qualité d'un simple script.
    en l'occurrence, qui peut le plus ne peut pas le moins.
    je ne sais pas faire ce qu'il fait, mais sa pratique du shell est manifestement poussiéreuse.
    quand on a des objectifs élevés, c'est une chose sur laquelle on passe très rapidement, en la survolant de loin.

    quant au tableau, que dire ?
    les shells ont des capacités différentes. un script POSIX n'a pas ce qu'il faut pour créer et gérer des tableaux. certaines versions de ksh peuvent gérer des objets, pas bash.
    les versions précédentes de bash ne pouvaient pas gérer les tableaux associatifs - /bin/sh (s'il n'est pas un lien vers bash) ne sait pas gérer les tableaux !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  16. #76
    Nouveau membre du Club Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    D'accord j'ai un peu près compris. J'ai changé sh par bash et le "==" par "=" simple.

    Et j'ai changé de DSI :$ pas drôle...
    Il faut apprendre, non pas pour l'amour de la connaissance, mais pour se défendre contre le mépris dans lequel le monde tient les ignorants.

    Apprendre sans réfléchir est vain. Réfléchir sans apprendre est dangereux.



    Oh et allez checker pour plein d'amour pour le jeux vidéal : https://www.instant-gaming.com/igr/derisoir/
    Cordialement.

  17. #77
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Faut pas hésiter à approfondir ses connaissances du shell en général et de bash en particulier, on a pleins de cours très accessibles aux débutants et mêmes utiles aux confirmés. Je te recommande de commencer par ceci puis une fois que c'est fait, poursuivre avec cela et pour un peu de pratique sur des exercices faciles en parallèle et la FAQ.

    Les exercices et les cc/cl de solutions toutes faites sont très productifs pour apprendre mais loin d'être suffisants, il faut aussi comprendre les apports de bash par rapport au sh POSIX et bien comprendre que bien souvent on confond les deux et en plus le choix des distributions linux de faire des liens symboliques de sh vers bash ou dash contribuent à mon sens au manque de maîtrise approfondie de ces technos.

    Sur ce forum, plusieurs membres challengent au-delà des simples considérations de "ça marche", "ça marche pas" et "on l'a testé au travail ou à l'école avec mon prof/DSI/team leader/CTO/et qui sais-je" comme on peut le voir sur d'autres forums cela permet ainsi à tout le monde de monter en compétence et de surtout maîtriser et comprendre se qu'ils sont en train de faire et si possible d'avoir les solutions les plus optimales possibles (le plus important c'est de comprendre ce qu'on fait et comment ça marche et de chercher à aller plus loin dans la maîtrise). Et du coup quasiment tout les conseils qui sont donnés "c'est pas comme ça qu'il faut lire un fichier, utiliser les tableau, etc" trouvent leur echo dans les cours que j'ai cité plus haut pour approfondir.

    Idriss

  18. #78
    Nouveau membre du Club Avatar de Louinux
    Homme Profil pro
    Ganil, Cyceron
    Inscrit en
    Décembre 2018
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ganil, Cyceron
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Bonjour Idriss,

    Merci pour cette réponse. Je suis allé voir ceci et cela

    CDLT
    Il faut apprendre, non pas pour l'amour de la connaissance, mais pour se défendre contre le mépris dans lequel le monde tient les ignorants.

    Apprendre sans réfléchir est vain. Réfléchir sans apprendre est dangereux.



    Oh et allez checker pour plein d'amour pour le jeux vidéal : https://www.instant-gaming.com/igr/derisoir/
    Cordialement.

  19. #79
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par hornetbzz Voir le message
    C'est ma journée créativité :-)

    Descriptif:
    "nettoie" un fichier bash en supprimant les lignes de commentaires et les lignes vides.
    Salut !

    J'utilise un alias sed

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    11:52:26 ~ -1- $ type pretty.remove.blanks+comments
    pretty.remove.blanks+comments is aliased to `egrep -v '(^[[:space:]]*#|^$|^[[:space:]]*//|^[[:space:]]*;)''
    12:10:15 ~ -1- $
    Exemple de fIchier d'origine pris sur mon système de fichier

    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
     
    12:10:57 ~ -1- $ cat /etc/bash.bashrc 
    # System-wide .bashrc file for interactive bash(1) shells.
     
    # To enable the settings / commands in this file for login shells as well,
    # this file has to be sourced in /etc/profile.
     
    # If not running interactively, don't do anything
    [ -z "$PS1" ] && return
     
    # check the window size after each command and, if necessary,
    # update the values of LINES and COLUMNS.
    shopt -s checkwinsize
     
    # set variable identifying the chroot you work in (used in the prompt below)
    if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
        debian_chroot=$(cat /etc/debian_chroot)                                                                                                                                                                                                    
    fi                                                                                                                                                                                                                                             
     
     
    # set a fancy prompt (non-color, overwrite the one in /etc/profile)                                                                                                                                                                            
    #PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '                                                                                                                                                                                           
     
    use_color=false                                                                                                                                                                                                                                
     
    # Set colorful PS1 only on colorful terminals.                                                                                                                                                                                                 
    # dircolors --print-database uses its own built-in database                                                                                                                                                                                    
    # instead of using /etc/DIR_COLORS.  Try to use the external file                                                                                                                                                                              
    # first to take advantage of user additions.  Use internal bash                                                                                                                                                                                
    # globbing instead of external grep binary.                                                                                                                                                                                                    
    safe_term=${TERM//[^[:alnum:]]/?}   # sanitize TERM                                                                                                                                                                                            
    match_lhs=""                                                                                                                                                                                                                                   
    [[ -f ~/.dir_colors   ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"                                                                                                                                                                          
    [[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"                                                                                                                                                                        
    [[ -z ${match_lhs}    ]] \                                                                                                                                                                                                                     
            && type -P dircolors >/dev/null \                                                                                                                                                                                                      
            && match_lhs=$(dircolors --print-database)                                                                                                                                                                                             
    [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true                                                                                                                                                                        
     
     
    if ${use_color} ; then                                                                                                                                                                                                                         
     
            # enable color support of ls and also add handy aliases
            if [ -x /usr/bin/dircolors ]; then
            # test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
            eval `dircolors`
            LS_COLORS="$LS_COLORS*.JPG=01;35:*.GIF=01;35:*.jpg=01;35:*.gif=01;35:*.jpeg=01;35:*.pcx=01;35:*.png=01;35:*.pnm=01;35:*.bz2=01;31:*.mpg=01;38:*.mpeg=01;38:*.MPG=01;38:*.MPEG=01;38:*.m4v=01;038:*.mp4=01;038:*.swf=01;038:*.avi=01;38:*.AVI=01;38:*.wmv=01;38:*.WMV=01;38:*.asf=01;38:*.ASF=01;38:*.mov=01;38:*.MOV=01;38:*.mp3=01;39:*.ogg=01;39:*.MP3=01;39:*.Mp3=01;39"
            fi
            # Enable colors for ls, etc.  Prefer ~/.dir_colors #64489
            #if type -P dircolors >/dev/null ; then
            #        if [[ -f ~/.dir_colors ]] ; then
            #                eval $(dircolors -b ~/.dir_colors)
            #        elif [[ -f /etc/DIR_COLORS ]] ; then
            #                eval $(dircolors -b /etc/DIR_COLORS)
            #        fi
            #fi
     
            if [[ ${EUID} == 0 ]] ; then
                    PS1='\[\033[0;37m\]\[\033[0;35m\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
            else
                    PS1='\[\033[0;37m\]\[\033[0;35m\]${debian_chroot:+($debian_chroot)}\[\033[0;35m\]\u@\h\[\033[0;37m\]:\[\033[0;36m\]\w >\[\033[0;00m\] '
            fi
     
            alias ls='ls --color=auto'
            alias grep='grep --colour=auto'
            alias fgrep='fgrep --colour=auto'
            alias egrep='egrep --colour=auto'
            alias ll='ls -lF'
            alias la='ls -A'
            alias l='ls -CF'
    else
            if [[ ${EUID} == 0 ]] ; then
                    # show root@ when we don't have colors
                    PS1='\u@\h \W \$ '
            else
                    PS1='\u@\h \w \$ '
            fi
    fi
     
    # Try to keep environment pollution down, EPA loves us.
    unset use_color safe_term match_lhs
     
    # Commented out, don't overwrite xterm -T "title" -n "icontitle" by default.
    # If this is an xterm set the title to user@host:dir
    #case "$TERM" in
    #xterm*|rxvt*)
    #    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
    #    ;;
    #*)
    #    ;;
    #esac
     
    # enable bash completion in interactive shells
    if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
        . /etc/bash_completion
    fi
     
    # sudo hint
    #if [ ! -e $HOME/.sudo_as_admin_successful ]; then
    #    case " $(groups) " in *\ admin\ *)
    #    if [ -x /usr/bin/sudo ]; then
    #       cat <<-EOF
    #       To run a command as administrator (user "root"), use "sudo <command>".
    #       See "man sudo_root" for details.
    #
    #       EOF
    #    fi
    #    esac
    #fi
     
    # if the command-not-found package is installed, use it
    if [ -x /usr/lib/command-not-found ]; then
            function command_not_found_handle {
                    # check because c-n-f could've been removed in the meantime
                    if [ -x /usr/lib/command-not-found ]; then
                       /usr/bin/python /usr/lib/command-not-found -- $1
                       return $?
                    else
                       return 127
                    fi
            }
    fi
     
    12:11:10 ~ -1- $

    Le même fIchier nettoyé

    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
     
    12:11:10 ~ -1- $ pretty.remove.blanks+comments /etc/bash.bashrc    
    [ -z "$PS1" ] && return
    shopt -s checkwinsize
    if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
        debian_chroot=$(cat /etc/debian_chroot)
    fi
    use_color=false
    safe_term=${TERM//[^[:alnum:]]/?}   # sanitize TERM
    match_lhs=""
    [[ -f ~/.dir_colors   ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
    [[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
    [[ -z ${match_lhs}    ]] \
            && type -P dircolors >/dev/null \
            && match_lhs=$(dircolors --print-database)
    [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
    if ${use_color} ; then
            if [ -x /usr/bin/dircolors ]; then
            eval `dircolors`
            LS_COLORS="$LS_COLORS*.JPG=01;35:*.GIF=01;35:*.jpg=01;35:*.gif=01;35:*.jpeg=01;35:*.pcx=01;35:*.png=01;35:*.pnm=01;35:*.bz2=01;31:*.mpg=01;38:*.mpeg=01;38:*.MPG=01;38:*.MPEG=01;38:*.m4v=01;038:*.mp4=01;038:*.swf=01;038:*.avi=01;38:*.AVI=01;38:*.wmv=01;38:*.WMV=01;38:*.asf=01;38:*.ASF=01;38:*.mov=01;38:*.MOV=01;38:*.mp3=01;39:*.ogg=01;39:*.MP3=01;39:*.Mp3=01;39"
            fi
            if [[ ${EUID} == 0 ]] ; then
                    PS1='\[\033[0;37m\]\[\033[0;35m\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
            else
                    PS1='\[\033[0;37m\]\[\033[0;35m\]${debian_chroot:+($debian_chroot)}\[\033[0;35m\]\u@\h\[\033[0;37m\]:\[\033[0;36m\]\w >\[\033[0;00m\] '
            fi
            alias ls='ls --color=auto'
            alias grep='grep --colour=auto'
            alias fgrep='fgrep --colour=auto'
            alias egrep='egrep --colour=auto'
            alias ll='ls -lF'
            alias la='ls -A'
            alias l='ls -CF'
    else
            if [[ ${EUID} == 0 ]] ; then
                    PS1='\u@\h \W \$ '
            else
                    PS1='\u@\h \w \$ '
            fi
    fi
    unset use_color safe_term match_lhs
    if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
        . /etc/bash_completion
    fi
    if [ -x /usr/lib/command-not-found ]; then
            function command_not_found_handle {
                    if [ -x /usr/lib/command-not-found ]; then
                       /usr/bin/python /usr/lib/command-not-found -- $1
                       return $?
                    else
                       return 127
                    fi
            }
    fi
    12:11:19 ~ -1- $
    Ça supprime uniquement les lignes commençant par # (bash & co) // (je sais plus) ; (lisp) ou les lignes vides.

  20. #80
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Bonjour,

    Pour la récupération de son IP publique, un petit dernier :

    Et toute sa syntaxe qui va avec expliquée là : ifconfig.me

    C'est ce que j'utilise, mais comme il manque un saut de ligne j'ai ajouté un echo derière, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    12:20:02 ~ -1- $ net.ip.public
    197.201.1.50
    12:20:05 ~ -1- $ type net.ip.public
    net.ip.public is aliased to `curl ifconfig.me; echo'
    12:20:08 ~ -1- $

Discussions similaires

  1. Script shell
    Par anzar dans le forum Linux
    Réponses: 4
    Dernier message: 03/12/2004, 14h41
  2. [JSP] script shell
    Par goolix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/08/2004, 09h08
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 16h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 13h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 09h24

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