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. #21
    Membre éclairé
    Nom du script: my_sqldump.sh

    Compatible avec : sh

    Descriptif:
    Dump de vos bases de données mysql dans un tarball.

    Pré-requis:
    mysql installé ;-)

    Points d'intérêt:
    * le script peut très bien être appelé par un shell/cron de backup par exemple.

  2. #22
    Membre confirmé
    Citation Envoyé par hornetbzz Voir le message
    Nom du script: my_sqldump.sh

    Compatible avec : sh

    Descriptif:
    Dump de vos bases de données mysql dans un tarball.

    Pré-requis:
    mysql installé ;-)

    Points d'intérêt:
    * le script peut très bien être appelé par un shell/cron de backup par exemple.
    Merci, ça va vraiment aider, je l'utilise déjà !
    "When you can measure what you are speaking about, and express it in numbers, you know something about it; but when you cannot measure it, when you cannot express it in numbers, your knowledge is of a meager and unsatisfactory kind; it may be the beginning of knowledge, but you have scarcely in your thoughts advanced to the state of Science, whatever the matter may be."

    Lord Kelvin - 1883.

  3. #23
    Expert éminent sénior
    Ce message n'a pas pu être affiché car il comporte des erreurs.
    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...

  4. #24
    Expert éminent
    Citation Envoyé par hornetbzz Voir le message

    EDIT2: en bash c'est l'histoire d'une ligne:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SERVER_IP=$(wget -q http://www.monip.org/ -O- | grep "IP :" | cut --characters=-80 | sed -e 's/^.* \(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/')
    Bonjour,

    Si je puis me permettre...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SERVER_IP=$(wget -qO- whatismyip.org)

    ou
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SERVER_IP=$(curl whatismyip.org)

    Raccourcissent de plus de moitié la ligne
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  5. #25
    Membre éclairé
    Citation Envoyé par zipe31 Voir le message
    Bonjour,

    Si je puis me permettre...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SERVER_IP=$(wget -qO- whatismyip.org)

    ou
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    SERVER_IP=$(curl whatismyip.org)

    Raccourcissent de plus de moitié la ligne
    ça m'aurait bien plus si cela fonctionnait sauf qu'aucune de ces 2 propositions ne fonctionnent.

  6. #26
    Expert éminent
    Citation Envoyé par hornetbzz Voir le message
    ça m'aurait bien plus si cela fonctionnait sauf qu'aucune de ces 2 propositions ne fonctionnent.
    Salut,

    Quand j'ai posté ça marchait, mais là apparemment le site est en carafe

    S'pad'mafôt, patapé hein ?
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #27
    Expert éminent
    Tiens un remplaçant : whatismyip.akamai.com
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  8. #28
    Modérateur

    Remplace ton site par celui-ci
    Je l'utilise celui-ci depuis bien longtemps déjà.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    wget -qO- http://www.whatismyip.com/automation/n09230945.asp
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  9. #29
    Expert éminent
    Un autre au cas ou : whatismyip.fr/raw/

    $ man woman
    Il n'y a pas de page de manuel pour woman.

  10. #30
    Expert éminent
    Bonjour,

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

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    curl ifconfig.me


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

    $ man woman
    Il n'y a pas de page de manuel pour woman.

  11. #31
    Membre habitué
    Utilitaire
    Bonjour,
    suite à mon message concernant zenity (http://www.developpez.net/forums/d1505851/systemes/linux/shell-commandes-gnu/zenity-list-from-file/, j'ai pri un peu de temps pour écrire le script ci-dessous.
    Il ne fait rien de bien exceptionnel et le code doit pouvoir être simplifié, il m'a surtout permis de me faire la main sur quelques commandes que je ne maîtrise pas aussi bien que je le voudrais (sed, awk, zenity)
    Je vous le livre tel quel, n'hésitez pas à commenter, corriger, améliorer.

    Nom du script: Util_V1
    Compatible avec: Bash
    Descriptif: Permet des actions de recherche, de mise à jour, d'installation etc.... (voir fichier d'aide)
    Pré-requis: le paquetage zenity
    Testé sous ubuntu et variantes

    En PJ:
    le script,
    le fichier texte d'explications

  12. #32
    Rédacteur

    Nom du script : pskill.sh

    Compatible avec: Bash

    Descriptif : pskill permet d'envoyer un signal à un processus homogene à un nom de programme. Par defaut, il envoie le signal de mort.

    Pré-requis: bash

    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
     
    #!/bin/bash
     
     #author : marc AUTRAN
     #Email : xxxxxx@xxxxx.xx
     #date : 22 dec 2002
     #description : script shell qui envoie un signal à un processus verifiant une expression reguliere
     #le signal est envoye via la commande kill
     #la commande kill respecte la synthaxe suivante : kill -n signal processus
     #ce script fut teste sous linux noyau 2.2.16
     
     #traite l'option -h
     for option
     do
       if [ "$option" = -h ]
       then
         echo 'Usage pskill.sh [-q] [-v] [-h] [-sig] <expression reguliere> '
         echo "Permet d'envoyer un signal via la commande kill aux processus dont la commande verifie <expression reguliere>"
         echo '-q : query, demande confirmation pour chaque processus'
         echo '-v : verbeux, affiche ce qui est fait'
         echo "-h : affichage de ce message d'aide"
         echo "-sig : ou sig est un signal, utilisation de ce signal au lieu du signal par defaut (SIGTERM). sig peut etre numerique ou symbolique selon ce qu'accepte la commande kill"
         exit
       fi
     done
     
     #traite les options -q -v et -signal
     declare -i compteur=0
     s=0
     v=0
     q=0
     while [ $# -gt 1 ]
     do
       case $1 in
         -v )
           echo 'debut de traitement ...'
           v=1
           shift;;
         -q )
           q=1
           shift;;
         -* )
           s=$1
           shift;;
       esac
       compteur=compteur+1
       if [ $v = 0 ] &&[ $q = 0 ] && [ $s = 0 ]
       then
         break
       fi
       if [ $compteur = 3 ]
       then
         break
       fi
     done
     
     if [ $q = 0 ]
     then
       if [ $s = 0 ]
       then
         signal=SIGTERM #le signal par defaut est SIGTERM
       else
         signal=`echo $s | cut -c2-6` #recupere le signal
       fi
       processus=`ps -e | grep $1 | cut -c1-6` #trouve le pid du process
       kill -n $signal $processus #envoie le signal au processus cible
       if [ $v = 1 ]
       then
         echo "signal $signal envoye a $1"
       fi
     else
       #mode query
       echo "voulez vous killer $1 o n"
       read r
       if [ "$r" = o ]
       then
         if [ $s = 0 ]
         then
           signal=SIGTERM
         else
           signal=`echo "$s" | cut -c2-6`
         fi
         processus=`ps -e | grep $1 | cut -c1-6`
         kill -n $signal $processus
         if [ $v = 1 ]
         then
           echo "signal $signal envoye a $1"
         fi
       fi
     fi
     
     if [ $v = 1 ]
     then
       echo 'fin de traitement'
     fi
    Développeur Java
    Site Web

  13. #33
    Rédacteur

    Nom du script rename.sh

    Compatible avec: Bash

    Descriptif : rename.sh permet de renomer des fichier conformement à une expression régulière.
    Vous trouverez l'usage de ce scripts en utilisant l'option -h de cet executable.

    Pré-requis: bash

    Code :
    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
     
    #!/bin/bash
     #author : marc AUTRAN
     #Email : xxxxxx@xxxxx.xx
     #date : 22 dec 2002
     #description : script shell qui renome des fichiers conformement a une expression reguliere
     #le renomage se fait via la commande mv
     #ce script fut teste sous linux noyau 2.2.16
     
     
     #traite l'option -h
     for option
     do
       if [ "$option" = -h ]
       then
         echo 'Usage rename.sh [-q] [-v] [-h] <commande> fichier ...'
         echo 'Renome les fichiers en appliquant la commande sur les noms'
         echo '-q : query, demande confirmation pour chaque fichier'
         echo '-v : verbeux, affiche ce qui est fait'
         echo "-h : affichage de ce message d'aide"
         exit
       fi
     done
     
     #traite les options -q et -v
     declare -i compteur=0
     v=0
     q=0
     while [ $# -gt 2 ]
     do
       case $1 in
         -v )
           echo 'debut de traitement ...'
           v=1
           shift;;
         -q )
           q=1
           shift;;
       esac
       compteur=compteur+1
       if [ $v = 0 ] &&[ $q = 0 ]
       then
         break
       fi
       if [ $compteur = 2 ]
       then
         break
       fi
     done
     
     if [ $q = 0 ]
     then
       for name
       do
         if [ "$name" != "$1" ]
         then
           new_name=`echo $name | $1` #determine le nouveau nom
           mv $name $new_name
           if [ $v = 1 ]
           then
               echo "$name renome en  $new_name"
           fi
         fi
       done
     else
       for name
       do
         if [ "$name" != "$1" ]
         then
           new_name=`echo $name | $1`
           echo "voulez vous renomer $name en $new_name o n "
           read r
           if [ "$r" = o ]
           then
             mv $name $new_name
             if [ $v = 1 ]
             then
                 echo "$name renome en  $new_name"
             fi
           fi
         fi
       done
     fi
     
     if [ $v = 1 ]
     then
       echo 'fin de traitement'
     fi
    Développeur Java
    Site Web

  14. #34
    Modérateur

    Bonjour,

    les options d'un script devraient être traitées avec getopts.
    il y a une faute de frappe ligne 40 : [c]&&[[/c].
    les nombres devraient être comparés avec un opérateur arithmétique : test $n = 0 -> test $n -eq 0 (cf. help test); voire avec une simple évaluation arithmétique : if ((!n)); then;...; fi. .
    new_name=`echo $name | $1` ça semble une erreur, que veux-tu faire ici ?
    il vaudrait mieux tester l'existence de $q dans une seule boucle, plutôt que de faire deux boucles quasi identiques dans le test.

    rename existe (pas sur tous les systèmes GNU/linux ?), et utilise des regex perl.
    pkill existe, et utilise des regex étendues.
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  15. #35
    Rédacteur

    Bonjour,

    tout d'abord, ces 2 scripts et particulièrement rename.sh ont été écrits il y a 13 ans pour un TP lorsque j'étais étudiant. Depuis, j'imagine que ces fonctionnalités sont devenues des standard du shell. Mais à l'époque rien n'existait sinon je ne les auraient pas inventés.

    Pour le &&[ tu as raison il faut && [ Quant au new_name=`echo $name | $1`, je souhaitais traiter, ou plutôt je traitais $1 qui contenait le nom de la commande et $name le nom du fichier ;) ... quand je disais que rien n'existait à l'époque, peut etre que le rename actuel ne prend traite pas cette option. Pour les tests tu as sans doute raison, je ne suis pas assez bon en bash pour me prononcer. En fait à cette époque dans cette école d'ingénieur, on parlait essentiellement C et C++ je n'ai fait ces 2 scripts que pour un cours de shell. marc,
    Développeur Java
    Site Web

  16. #36
    Rédacteur

    N_BaH,

    Je viens également de me rendre compte que tu avais masqué l'adresse mail dans le script.

    Je ne savais pas qu'il fallait l'enlever, j'ai fait un copier coller brut. De toute façon cette adresse a été résilié depuis 10 ans que j'ai quitté l'ENSTA

    alors mille excuses pour cette maladresse

    Marc
    Développeur Java
    Site Web

  17. #37
    Modérateur

    ces 2 scripts [...] ont été écrits il y a 13 ans
    pourquoi les poster maintenant ?
    certains débutant pourraient, d'ailleurs, prendre tes maladresses pour exemple.

    j'ai masqué l'adresse e-mail pour te protéger : une jolie fille ne devrait pas porter un t-shirt indiquant son 06.
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  18. #38
    Membre du Club
    Lecteur mp3 en ligne de commande
    Nom du script: Lecteur mp3 en ligne de commande

    Compatible avec: Bash

    Descriptif: Remplacer vlc ou autre player pour écouter de la musique sur son PC. Ce script peut être lancé avec trois paramètres : le dossier, la lecture (séquentielle ou aléatoire) ainsi que, le cas échéant, la durée au bout de laquelle il va s'arrêter de lui même. C'est pratique par exemple pour en faire un réveil "croné".

    Pré-requis: le paquetage mpg123

    Améliorations à prévoir:
    1. Non pas imposer une arborescence mais offrir la possibilité d'en parcourir une à partir d'une base choisie.
    2. J'ai un bug ligne 84, si la valeur n'est pas définie.


    Code:
    #!/bin/bash
    # =============================================================================
    # mp3 player
    # Alain BACH le 15/09/2015
    # =============================================================================

    basepath=/home/$LOGNAME/Musique

    # clear
    echo "$1 $2 $3"

    choix=$1
    ordre=$2
    temps=$3

    if [ "x$1" = "x" ];
    then
    echo "A - Musique des années 80 : France"
    echo "B - Musique des années 80 : International"
    echo "C - Musique des années 80 : TOUT"
    echo "D - Musique classique"
    echo " "
    echo "Faites votre choix"
    read choix

    echo " "
    echo "R - Ordre aléatoire"
    echo "S - Ordre séquentiel"
    echo " "
    read ordre

    echo " "
    echo "Quelle temporisation (en minutes) ?"
    read temps
    $temps=$temps*60

    elif [ "x$2" = "x" ]
    then
    echo " "
    echo "R - Ordre aléatoire"
    echo "S - Ordre séquentiel"
    echo " "
    read ordre
    choix=$1

    echo " "
    echo "Quelle temporisation (en minutes) ?"
    read temps
    $temps=$temps*60

    fi

    case $ordre in
    S | s )
    ordre=""
    ;;
    R | r )
    ordre="-Z"
    ;;
    * )
    ordre=""
    ;;
    esac

    case $choix in
    A | a )
    chemin=$basepath"/annees\ 80/France"
    commande="find "$chemin" -iname "*.mp3" | mpg123 $ordre -q --list -"
    ;;
    B | b )
    chemin="$basepath/annees\ 80/International"
    commande="find "$chemin" -iname "*.mp3" | mpg123 $ordre -q --list -"
    ;;
    C | c )
    chemin="$basepath/annees\ 80"
    commande="find "$chemin" -iname "*.mp3" | mpg123 $ordre -q --list -"
    ;;
    D | d)
    chemin="$basepath/classique"
    commande="find "$chemin" -iname "*.mp3" | mpg123 $ordre -q --list -"
    ;;
    esac

    if [ $temps -gt 0 ] ;
    then
    commande="$commande & sleep $temps && pid1=\$! && kill \$pid1"
    fi

    clear
    echo " "
    echo "$commande"
    eval $commande

    exit 0;

  19. #39
    Membre du Club
    Stratégie de sauvegarde
    Nom du script: Sauvegarde des données

    Compatible avec: Bash

    Descriptif:Je suis un peu maniaque en ce qui concerne la sauvegarde de mes données... souvenir d'un temps où j'exerçais des responsabilités dans ce domaine.
    Je me suis donc attelé à écrire une stratégie de sauvegarde "à ma façon", en tenant compte des possibilités dont je dispose.
    Ces possibilités, quelles sont-elles :
    • Un disque externe de 1To branché en USB3 sur mon PC
    • Un Raspberry connecté en filaire sur mon réseau
    • Un cloud hébergé sur mon site Internet chez OVH
    • Un cloud chez Adrive


    Je voulais aussi rapatrier les sites Internet que je gère pour les sauvegarder et sauver les machines virtuelles que j'utilise.

    J'ai analysé les flux pour optimiser les temps en fonction des goulots d'étranglements et me permettre de reprendre la main le plus vite possible sur mon PC et reprendre le cours normal de mes activités.

    Je voulais rendre cette sauvegarde souple, me permettant de lancer l'un, l'autre ou tous les éléments selon mon envie ou mon besoin tout en intégrant une planification en fonction du jour de la semaine.

    Le résultat ? le voilà.

    J'en parle aussi sur mon site Internet personnel.

    Pré-requis: le paquetage mpg123 pour la notification sonore.

    Nota : le programme principal, celui à lancer, est sauvegarde.sh

    Le programme :

  20. #40
    Modérateur

    Lecteur mp3 en ligne de commande
    Bonjour,

    J'ai un bug ligne 84, si la valeur n'est pas définie.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if test ${temps:-0} != 0
    ou
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    if ((temps))


    pourquoi une variable commande alors que la commande est toujours la même ?
    de toute façon, une variable n'est pas faite pour stocker une commande qui doit être exécutée, utilises plutôt une fonction.

    sleep ne retourne jamais 'faux'; à moins qu'il lui manque un paramètre, ou que ce dernier ne soit pas numérique, mais, ça, il faut le tester avant d'appeler la commande.
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

###raw>template_hook.ano_emploi###