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. #41
    Membre du Club
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Merci pour le tuyau

    Citation Envoyé par N_BaH Voir le message
    pour quoi 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.
    Je suis tout à fait d'accord avec vous : une variable n'est pas faite pour stocker une commande mais, en l'occurence, je pensais que ce serait plus compliqué à gérer. Je vais effectivement en faire une fonction.

    Citation Envoyé par N_BaH Voir le message
    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.
    sleep ne retourne en effet jamais faux mais me permet d'attendre les "x" secondes avant de passer à la suite et de lancer le kill de la fonction. C'est la solution la plus simple que j'ai trouvée (Google est mon ami) pour, par exemple, en faire un réveil et éteindre la tâche planifiée au bout de "x" secondes.

  2. #42
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,
    Citation Envoyé par Aenean Voir le message
    [*]J'ai un bug ligne 84, si la valeur n'est pas définie.
    Y'a une ch'tite coquille là aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo " "
    echo "Quelle temporisation (en minutes) ?"
    read temps
    $temps=$temps*60
    $ man woman
    Il n'y a pas de page de manuel pour woman.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    sleep ne retourne en effet jamais faux mais me permet d'attendre les "x" secondes avant de passer à la suite et de lancer le kill de la fonction
    mon propos ne portait pas sur le sleep, mais sur le &&
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #44
    Membre du Club
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    mon propos ne portait pas sur le sleep, mais sur le &&
    Désolé, j'avais mal compris

  5. #45
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Salut,
    Citation Envoyé par Aenean Voir le message
    [...] Je voulais aussi rapatrier les sites Internet que je gère pour les sauvegarder et sauver les machines virtuelles que j'utilise. [...]
    Rhôôôô, le seul script que je voulais voir (echo "V - Lancement de la sauvegarde des machines virtuelles" >>$fichierlog_sauvegarde && /home/$mainuser/scripts/svg-vm.sh) est absent du zip...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #46
    Membre du Club
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut,

    Rhôôôô, le seul script que je voulais voir (echo "V - Lancement de la sauvegarde des machines virtuelles" >>$fichierlog_sauvegarde && /home/$mainuser/scripts/svg-vm.sh) est absent du zip...
    #!/bin/bash
    #=========================================================================================
    # Sauvegarde des machines virtuelles
    #
    # Alain BACH le 08/09/2015 - http://www.alainbach.fr
    #=========================================================================================

    #=========================================================================================
    # Lister ici l'ensemble des machines virtuelles à sauvegarder
    # A noter que les noms de ces machines virtuelles ne doivent pas comporter d'espace
    #=========================================================================================

    VBOXLIST='W7-home-premium lmde-2-cinnamon lmde-2-mate Mint-17.1 Ubuntu_15_04'
    user_vm=$3
    EXPORT_DIR=/home/$LOGNAME/Documents/svg_vm/
    log_svg_vm=/home/$LOGNAME/scripts/logs/log_svg_vm.log
    logerreur_svg_vm=/home/$LOGNAME/scripts/logs/log_svg_vm_erreur.log

    mpg123 -q /home/$LOGNAME/scripts/sons/sauvegarde_sites_DEBUT.mp3

    echo "===============================================================================" >> $logerreur_svg_vm
    echo "ERREURS : Sauvegarde svg vm vers $dest" >> $logerreur_svg_vm
    echo "Backup récup sites commence svg vm le "`date "+%d/%m/%Y a %T"` >> $logerreur_svg_vm

    echo "===============================================================================" >> $log_svg_vm
    echo "Sauvegarde recup sites vers $dest" >> $log_svg_vm
    echo "Backup recup sites commence le "`date "+%d/%m/%Y a %T"` >> $log_svg_vm
    echo "Lancement de la sauvegarde des machines virtuelles" >> $log_svg_vm
    echo "Liste des machines virtuelles à exporter : ${VBOXLIST}"
    echo "------------------------------------------------------------"
    for VBOX in ${VBOXLIST}; do
    FILE="${EXPORT_DIR}${VBOX}.ova"
    echo "Export de ${VBOX} vers ${FILE}"
    if [ -f "${FILE}" ]; then
    echo "Suppression du fichier : ${FILE}" 2>> $logerreur_svg_vm
    rm "${FILE}"
    fi
    echo "-------------------" >> $log_svg_vm
    echo "Sauvegarde de ${FILE} commencée" >> $log_svg_vm
    vboxmanage export "${VBOX}" -o "${FILE}" 2>>$logerreur_svg_vm 1>>$log_svg_vm
    echo "Sauvegarde de ${FILE} terminée" >> $log_svg_vm
    echo "-------------------" >> $log_svg_vm
    done

    echo "Fin de log" >> $logerreur_svg_vm
    echo "===============================================================================" >> $log_svg_vm
    echo "Fin de la sauvegarde des machines virtuelles " >> $log_svg_vm
    echo "===============================================================================" >> $log_svg_vm

    mpg123 -q /home/$LOGNAME/scripts/sons/sauvegarde_sites_FIN.mp3

    cat $log_svg_vm >> $1
    cat $logerreur_svg_vm >> $2
    Désolé pour l'oubli

  7. #47
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Citation Envoyé par Aenean Voir le message
    Désolé pour l'oubli
    OK merci.

    Juste une chose qui m'interpelle : je ne vois dans ton script aucune gestion d'erreur, pré ou post-traitement...

    • Post-traitement car il peut toujours se passer tout et n'importe quoi pendant l'écriture d'un fichier, donc toujours vérifier après l'opération que celle-ci s'est bien déroulée. Oui, j'ai bien vu que tu loggues tout, mais ça t'obliges à aller voir dans les logs, ensuite (à moins que tu aies un outil pour ça).
    • Pré-traitement parce que tu ne fais aucun contrôle de la possibilité de la copie : y a-t'il assez d'espace disque disponible pour le fichier à copier ?


    Tiens, d'ailleurs, quelle taille font tes fichiers .ova ? Et combien en as-tu ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #48
    Membre du Club
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Jipété Voir le message
    OK merci.

    Juste une chose qui m'interpelle : je ne vois dans ton script aucune gestion d'erreur, pré ou post-traitement...

    • Post-traitement car il peut toujours se passer tout et n'importe quoi pendant l'écriture d'un fichier, donc toujours vérifier après l'opération que celle-ci s'est bien déroulée. Oui, j'ai bien vu que tu loggues tout, mais ça t'obliges à aller voir dans les logs, ensuite (à moins que tu aies un outil pour ça).
    • Pré-traitement parce que tu ne fais aucun contrôle de la possibilité de la copie : y a-t'il assez d'espace disque disponible pour le fichier à copier ?


    Tiens, d'ailleurs, quelle taille font tes fichiers .ova ? Et combien en as-tu ?
    Je suis très loin d'être un spécialiste du développement. Je me suis mis à la programmation il y a peu, suite à une réorientation professionnelle. J'ai donc encore beaucoup à apprendre, et Dieu merci !

    Concernant la gestion d'erreur, comme ces scripts ont été écrits pour mon besoin personnel, je n'en ai pas vu l'utilité.
    • Pré-traitement : je ne vois pas comment faire. Au pire, en cas de manque de place (ce qui m'est arrivé lors d'une copie vers mon Rasp' où je n'ai que deux clés USB de 64Go), je déplace des fichiers sur mon home ou je modifie mes fichiers d'inclusion / exclusion et l'affaire est reglée au prochain lancement.
    • Post-traitement : la consultation des logs me semble suffisante et c'est bel et bien leur raison d'être. Comme ses logs sont envoyées par mail, je vois très vite, même au bureau, ce qui s'est passé.

    Comme dit, cette stratégie, je vous la propose, et elle est perfectible cela me semble évident. Elle m'a servi à apprendre, beaucoup, notamment en ce qui concerne la parallélisation de tâches, la mise en place d'un script paramétré et j'en passe.

    Concernant mes ".ova", tu as vu les machines que je sauvegarde. Il y en a 6. leurs tailles vont de 2.7 à 22.4 Go. Mes machines virtuelles font 100Go pour la W7-home-premium, 16Go pour la lmde-2-cinnamon la Mint-17.1 et la lmde-2-mate, et enfin 32Go pour la Ubuntu_15_04

  9. #49
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 719
    Points : 15 105
    Points
    15 105
    Par défaut
    Merci pour les infos.

    Citation Envoyé par Aenean Voir le message
    Concernant mes ".ova", tu as vu les machines que je sauvegarde. Il y en a 6. leurs tailles vont de 2.7 à 22.4 Go. Mes machines virtuelles font 100Go pour la W7-home-premium, 16Go pour la lmde-2-cinnamon la Mint-17.1 et la lmde-2-mate, et enfin 32Go pour la Ubuntu_15_04
    Il y en a 6

    Je ne vois que 4 capacités pour les VM's. Mais bon, c'est pas grave.

    Donc en gros, tu recopies systématiquement le disque de chaque VM lors de la sauvegarde, même si presque rien n'a changé sur le disque. Beaucoup de copie pour pas grand chose, non ?
    Perso j'ai envisagé une autre approche : j'ai sauvegardé une première fois tous les fichiers de chaque VM, et ensuite, lors des sauvegardes suivantes, je "monte" les fichiers disque source et destination et je fais tourner rsync là-dessus, qui ne recopiera que ce qui a changé entre source et destination : ça va assez vite.
    Mais ça n'est pas envisageable dans le cadre des .ova.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #50
    Membre du Club
    Homme Profil pro
    Technicien d'étude
    Inscrit en
    Septembre 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien d'étude

    Informations forums :
    Inscription : Septembre 2007
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Merci pour les infos.

    Il y en a 6

    Je ne vois que 4 capacités pour les VM's. Mais bon, c'est pas grave.

    Donc en gros, tu recopies systématiquement le disque de chaque VM lors de la sauvegarde, même si presque rien n'a changé sur le disque. Beaucoup de copie pour pas grand chose, non ?
    Perso j'ai envisagé une autre approche : j'ai sauvegardé une première fois tous les fichiers de chaque VM, et ensuite, lors des sauvegardes suivantes, je "monte" les fichiers disque source et destination et je fais tourner rsync là-dessus, qui ne recopiera que ce qui a changé entre source et destination : ça va assez vite.
    Mais ça n'est pas envisageable dans le cadre des .ova.
    Il y a bien 4 capacités, mais 6 machines virtuelles. Je suis d'accord avec toi sur le fait que cette procédure n'est pas optimisée, mais je garde à l'esprit la différence entre passer un temps fou à optimiser et laisser faire la machine pendant que je n'en ai pas besoin...
    Je lance la sauvegarde de ces machine virtuelles,une fois par semaine, la nuit, pendant que j'essaye de dormir.
    Ca va prendre du temps machine, je te l'accorde, mais à un moment où je n'en ai aucunement besoin.
    De plus, bien sûr, ça va faire une sauvegarde d'un nouveau fichier OVA sur mon disque USB mais j'ai 1To et je purge automatiquement les anciennes sauvegardes incrémentales. Donc là encore,je ne suis pas à l'étroit. Ne perdons pas de vue que la sauvegarde incrémentale s'appuie sur le principe des liens symboliques ce qui optimise drastiquement l'utilisation de l'espace disque sur mon USB3.
    D'autre part, ces VM ne sont pas non plus critiques pour moi. La "Windows" est un peu plus importante que les autres mais c'est pas non plus la mort du petit cheval si je la perd.
    Dans ma stratégie globale, je me prémunis de la perte de mon PC, via la sauvegarde sur l'USB. Si je perd l'USB dans la foulée, j'ai mon Raspberry qui est là, avec l'essentiel. Si je le perd aussi, c'est qu'il y a eu le feu dans l'appartement et que je n'ai plus d'informatique du tout. Dans ce cas, mon cloud chez OVH est là pour assurer une restauration depuis une sauvegarde externalisée et, de toutes façons, j'aurais d'autres priorités à gérer avant de penser à remonter mon PC.

    Enfin, je n'oublie pas ce que me disais un vieux copain Québécois : la philosophie KISS qui veut dire Keep It Simple and Stupid. Avec 20% d'investissement en temps, je règle 80% des soucis. Y a-t-il réellement un gros intérêt à passer les 80% de mon temps, dans l'immédiat, à régler les 20% restants ? Je laisse chacun juge...

  11. #51
    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,

    Nom du script: pub_key

    Compatible avec: TCL
    Descriptif: permet de publier une clé publique (id_rsa.pub) sur un serveur distant.
    Demande le hostname du serveur, l'utilisateur utilisé pour la connexion ssh et son mot de passe (en saisie aveugle).
    Inscrit la clé RSA de l'utilisateur local dans le fichier authorized_keys de l'utilisateur demandé.
    (dans l'idéal, il faudrait contrôler que la clé n'existe pas déjà dans authorized_keys ).

    Pré-requis: l'utilisateur local doit posséder une clé RSA publique.

    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
    #!/usr/bin/expect -f
    #
    #	Script tcl de diffusion de cle publique RSA
    #	La cle diffusee est celle de l'utilisateur local qui doit donc avoir une cle publique RSA
    #
    #	On demande sur quel serveur diffuser la cle, pour quel utilisateur, le mot de passe en mod silencieux
    #	puis on se connecte par ssh
    #
    #	P. Goursonnet 12/07/2016
    #
     
    #
    #	Procedure erreur_cle : La cle publique de l'utilisateur n'existe pas
    #
    proc erreur_cle { userid fichier } {
    	puts "La cle publique de $userid ($fichier) n'existe pas. Abandon."
    	exit
    }
     
    #
    #	Initialisations : effacement ecran, timeout, prompt, utilisateur
    #
    puts \033\[2J
    set timeout 60
    set prompt "(%|#|\\$|%\]) $"
    set id_rsa "id_rsa.pub"
    log_user 0
    spawn whoami
    expect eof
    set userid [string trim $expect_out(buffer)]
     
    #
    #	Serveur sur lequel se connecter en SSH
    #
    stty echo
    send_user "\nServeur sur lequel publier la cle SSH : "
    expect_user -re "(.*)\n" {set serveur $expect_out(1,string)}
     
    #
    #	Utilisateur pour la connexion SSH
    #
    send_user "\nUser pour la connexion SSH : "
    expect_user -re "(.*)\n" {set sshuser $expect_out(1,string)}
     
    #
    #	Mot de passe de l'utilisateur SSH
    #
    send_user "\nMot de passe pour la connexion SSH : "
    stty -echo
    expect_user -re "(.*)\n" {set sshpwd $expect_out(1,string)}
     
    #
    #	Verification de l'existence de la cle publique pour l'utilisateur local
    #
    if {[regexp -nocase "root" $userid]} {
    	set chemin "/root/.ssh/"
    } else {
    	set chemin "/home/$userid/.ssh/"
    }
    if {[file exist $chemin]} {
    	if {[file isdirectory $chemin]} {
    		set fichier "$chemin$id_rsa"
    		if {[file exist $fichier]} {
    			if {! [file isdirectory $fichier]} {
    				puts "\nOK : La cle publique de $userid existe\n"
    			} else {
    				erreur_cle $userid $fichier
    			}
    		} else {
    			erreur_cle $userid $fichier
    		}
    	}
    } else {
    	erreur_cle $userid $fichier
    }
     
    stty echo
     
    #
    #	Recuperation de la cle publique RSA
    #
    set fp [open $fichier r]
    set lec_cle [read $fp]
    close $fp
     
    #
    #	Connexion au serveur distant
    #
    spawn ssh -o StrictHostKeyChecking=no $sshuser@$serveur
    expect {
    	$prompt {}
    	"*?assword:*" {
    		send -- "$sshpwd\n"
    		expect -re $prompt
    		expect {
    			"*?assword:*" {
    				send_user "\nErreur de connexion : mot de passe et/ou user incorrect\n"
    				exit
    			}
    		}
    	}
    	"you sure you want to continue connecting" {
    		send -- "yes\n"
    		expect -re $prompt
    	}
    	default {
    		send_user "\nErreur de connexion\n"
    		exit
    	}
    }
     
    #
    #	Verification de l'existence du repertoire .ssh sur le serveur distant
    #
    if {[regexp -nocase "root" $sshuser]} {
    	set chemin "/root/.ssh/"
    } else {
    	set chemin "/home/$sshuser/.ssh"
    }
     
    #
    #	Verification de l'existence du repertoire .ssh pour l'utilisateur distant
    #	
    send "ls $chemin\r"
    expect {
    	"No such file or directory" {	
    		puts "\n$chemin n existe pas. Creation"
    		send -- "/usr/bin/ssh-keygen -t rsa\r"
    		expect "*id_rsa*"
    		send "\r"
    		expect "*passphrase*"
    		send "\r"
    		expect "*again*"
    		send "\r"
    	}
    }
     
    #
    #	Positionnement dans le repertoire .ssh du serveur distant
    #	et ecriture de la cle publique RSA dans authorized_keys
    #
    log_user 0
     
    send -- "echo '$lec_cle'>>$chemin/authorized_keys\r"
    expect -re $prompt
     
    send -- "exit\r"
    expect eof
    pub_key.zip

    Pierre.

  12. #52
    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 Publication de clé RSA
    Salut,

    Nom du script: pub_key

    Compatible avec: TCL
    Descriptif: Le même que le précédent avec 2 ou 3 petites corrections et le contrôle de l'existence de la clé ou non dans le fichier authorized_keys distant.
    Il y a sûrement plus propre (je découvre TCL), mais il fonctionne.

    Pré-requis: l'utilisateur local doit posséder une clé RSA publique.
    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
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    #!/usr/bin/expect -f
    #
    #	Script tcl de diffusion de cle publique RSA
    #	La cle diffusee est celle de l'utilisateur local qui doit donc avoir une cle publique RSA
    #
    #	On demande sur quel serveur diffuser la cle, pour quel utilisateur, le mot de passe en mod silencieux
    #	puis on se connecte par ssh
    #
    #	P. Goursonnet	12/07/2016
    #			26/08/2016 Version incluant le controle cle deja presente ou non
     
    #
    #	Procedure erreur_cle : La cle publique de l'utilisateur n'existe pas
    #
    proc erreur_cle { userid fichier } {
    	puts "La cle publique de $userid ($fichier) n'existe pas. Abandon."
    	exit
    }
     
    #
    #	Initialisations : effacement ecran, timeout, prompt, utilisateur
    #
    puts \033\[2J
    set timeout 10
    set prompt "(%|#|\\$|%\]) $"
    set id_rsa "id_rsa.pub"
    log_user 0
    spawn hostname
    expect eof
    set localhost [string trim $expect_out(buffer)]
    spawn whoami
    expect eof
    set userid [string trim $expect_out(buffer)]
     
    #
    #	Serveur sur lequel se connecter en SSH
    #
    stty echo
    send_user "Serveur sur lequel publier la cle SSH : "
    expect_user -re "(.*)\n" {set serveur $expect_out(1,string)}
    #set serveur "slxd0016"
     
    #
    #	Utilisateur pour la connexion SSH
    #
    send_user "User pour la connexion SSH : "
    expect_user -re "(.*)\n" {set sshuser $expect_out(1,string)}
    #set sshuser "root"
     
    #
    #	Mot de passe de l'utilisateur SSH
    #
    send_user "Mot de passe pour la connexion SSH : "
    stty -echo
    expect_user -re "(.*)\n" {set sshpwd $expect_out(1,string)}
     
    #
    #	Verification de l'existence de la cle publique pour l'utilisateur local
    #
    if {[regexp -nocase "root" $userid]} {
    	set chemin "/root/.ssh/"
    } else {
    	set chemin "/home/$userid/.ssh/"
    }
    if {[file exist $chemin]} {
    	if {[file isdirectory $chemin]} {
    		set fichier "$chemin$id_rsa"
    		if {[file exist $fichier]} {
    			if {! [file isdirectory $fichier]} {
    				puts "\nControle : La cle publique de $userid existe bien\n"
    			} else {
    				erreur_cle $userid $fichier
    			}
    		} else {
    			erreur_cle $userid $fichier
    		}
    	}
    } else {
    	erreur_cle $userid $fichier
    }
     
    stty echo
     
    #
    #	Recuperation de la cle publique RSA
    #
    set fp [open $fichier r]
    set lec_cle [read $fp]
    close $fp
     
    #
    #	Connexion au serveur distant
    #
    spawn ssh -o StrictHostKeyChecking=no $sshuser@$serveur
    expect {
    	$prompt {}
    	"*?assword:*" {
    		send -- "$sshpwd\n"
    		expect -re $prompt
    		expect {
    			"*?assword:*" {
    				send_user "\nErreur de connexion : mot de passe et/ou user incorrect\n"
    				exit
    			}
    		}
     
    	}
    	"you sure you want to continue connecting" {
    		send -- "yes\n"
    		expect -re $prompt
    	}
    	"Last login:" {}
    	default {
    		send_user "\nErreur de connexion\n"
    		exit
    	}
    }
    #
    #	Verification de l'existence du repertoire .ssh sur le serveur distant
    #
    if {[regexp -nocase "root" $sshuser]} {
    	set chemin "/root/.ssh"
    } else {
    	set chemin "/home/$sshuser/.ssh"
    }
     
    #
    #	Verification de l'existence du repertoire .ssh pour l'utilisateur distant
    #	
    send "ls $chemin\r"
    expect {
    	"No such file or directory" {	
    		puts "\n$chemin n existe pas. Creation"
    		send -- "/usr/bin/ssh-keygen -t rsa\r"
    		expect "*id_rsa*"
    		send "\r"
    		expect "*passphrase*"
    		send "\r"
    		expect "*again*"
    		send "\r"
    	}
    }
     
    #
    #	Test de la presence de la cle dans le fichier authorized_keys
    #
    set deja_la 0
    expect $prompt
    send "cat $chemin/authorized_keys\r"
    expect -re $prompt
    set retour $expect_out(buffer)
    puts $retour
    puts "Recherche de $userid@$localhost"
     
    log_user 0
     
    expect {
    	-re {^([^\r]*)\r\n} {
    		puts "Ligne lue : '$expect_out(1,string)'."
    		if {[string match "*$userid@$localhost*" $expect_out(1,string)]} {
    			set deja_la 1
    		}
    		exp_continue
    	}
    }
     
    #puts $deja_la
    if {$deja_la == 0} {
     
    #
    #	Positionnement dans le repertoire .ssh du serveur distant
    #	et ecriture de la cle publique RSA dans authorized_keys
    #
    	puts "\nPublication de la cle RSA de $userid sur $serveur"
    	send -- "echo '$lec_cle'>>$chemin/authorized_keys\r"
    	expect -re $prompt
    	puts "$userid est maintenant autorise a se connecter en tant que $sshuser sur $serveur"
    } else {
    	puts "\nLa cle RSA pour $userid a deja ete publiee sur $serveur"
    }
     
    send -- "exit\r"
    expect eof
    pub_key.zip

  13. #53
    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 Le même en plus court
    Salut,

    Dans le script ci-dessus, j'ai remplacé le 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
    #if {[file exist $chemin]} {
           if {[file isdirectory $chemin]} {
                   set fichier "$chemin$id_rsa"
                   if {[file exist $fichier]} {
                           if {! [file isdirectory $fichier]} {
                                   puts "\nControle : La cle publique de $userid existe bien\n"
                           } else {
                                   erreur_cle $userid $fichier
                           }
                   } else {
                           erreur_cle $userid $fichier
                   }
           }
    } else {
           erreur_cle $userid $fichier
    }
     
    #
    #       Recuperation de la cle publique RSA
    #
    set fp [open $fichier r]
    set lec_cle [read $fp]
    close $fp
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if {[catch {
            set fichier "$chemin$id_rsa"
            set fp [open $fichier r]
            set lec_cle [read $fp]
            close $fp
    } err]} {
            erreur_cle $userid $fichier $err
    }
    C'est tout de même beaucoup plus court, et ça intercepte l'erreur...
    Du coup, j'ai aussi modifié la fonction d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc erreur_cle { userid fichier err} {
            puts "Impossible de lire la cle publique de $userid ($fichier)"
            puts "Erreur : $err"
            puts "Abandon."
            exit
    }

  14. #54
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Du coup, n'hésite pas à mettre à jour le post de base, plutôt qu'en créer un nouveau à chaque fois. ça rend la récupération de ton code à jour plus compliquée.
    Tu peux rajouter à ton message :
    Edit: amélioration fonction1
    Edit2: amélioration fonction1954
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  15. #55
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut VIIM
    Bonjour,

    J'ai l'habitude, en travaillant sur un projet, d'avoir besoin de créer plusieurs quick scripts de test, ce qui m'oblige à réécrire les include, import ...etc. C'est pourquoi j'ai écrit un programme en bash qui, lorsqu'invoqué avec des nouveaux fichiers écrit des entêtes prédéfinies selon l'extension (.c, .java, .cpp, .tex...) puis ouvre le(s) fichiers avec vim. Si le(s) fichier(s) existe(nt) déjà, on se contente de les ouvrir.

    Nom du script: viim

    Compatible avec: Bash

    Descriptif: Le script est en effet deux fichiers .sh, dont l'un n'est utilisé que pour définir les variables.

    Pré-requis: vim (sudo apt-get install vim (selon distribution) le cas échéant)

    Code: Fichier viim.sh (script principal)

    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
    #!/bin/bash
    #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# #*#*#*#*#*#*#*#*
    # 
    # File: viim.sh
    # Author: Nabil Elqatib
    # Email: nabilelqatib@gmail.com
    # Date: 27/10/2016
    # Version: 1.0
    # Description: A Shell script that writes simple headers (customizable) to the
    # 			   files given in arguments to vim, depending on their extensions: 
    # 			   c, cpp, tex, java, cs, py, sh, rb, html
    # 
    # #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*
     
    HERE=$(cd "$(dirname "$0")" && pwd)
    source "$HERE"/headers.sh
     
    declare -a files
    nbFiles=0
    verticalSplit=0
    horizontalSplit=0
     
    while [ "$#" -ne 0 ]; do
    	if [ "$1" = "-O" ]; then
    		verticalSplit=1
    	elif [ "$1" = "-o" ]; then
    		horizontalSplit=1
    	elif ! [ -s "$1" ]; then
    		# $1 is neither a directory nor a file which size is non-zero
     
    		fullName=$(basename "$1")
    		ext=".$(echo "$fullName" | sed 's/.*\.//g')"
    		bareName=$(basename "$1" "$ext")
     
    		case "$ext" in 
    			.c|.cs|.cpp|.java)
    				printf "$cl1_b $kw1\n $kw1 $file_ $fullName\n $kw1 $author_\n $kw1 $email_\n $kw1 $date_\n $kw1 $descr_\n $kw1\n$cl1_e" > "$1"
    				if [ "$ext" = ".c" ]; then
    					printf "$template_c\n" >> "$1"
    				elif [ "$ext" = ".java" ]; then
    					printf "$template_java1 $bareName $template_java2\n" >> "$1"
    				elif [ "$ext" = ".cpp" ]; then
    					printf "$template_cpp\n" >> "$1" 
    				elif [ "$ext" = ".cs" ]; then
    					printf "$template_cs1 $bareName $template_cs2\n" >> "$1"
    				fi
    				;;
     
    			.tex)
    				# dealing with backslashes and special combinations
    				# typically like "%A" when using bash is somehow touchy...
     
    				f "$1" "$cl3_b" "$kw3" "$cl3_e"
    				echo "$template_tex1" >> "$1"
    				newline "$1"
    				echo -E "\begin{document}" >> "$1"
    				printf "\n\n\n\n\n\n\n\n" >> "$1"
    				echo -E "\end{document}" >> "$1"
    				newline "$1"
    				;;
     
    			.py|.sh|.bash|.rb)
    				shebang "$1"
    				f "$1" "$cl2_b" "$kw2" "$cl3_e"
    				;;
     
    			.html)
    				printf "<!DOCTYPE html>\n$cl4_b$file_ $fullName\n$author_\n$email_\n$date_\n$descr_\n$cl4_e\n<html>\n\n<head>\n<title>" >> "$1"
    				echo -E "</title>" >> "$1"
    				echo -E "</head>" >> "$1"
    				newline "$1"
    				printf "<body>\n\n\n\n\n\n" >> "$1"
    				echo -E "</body>" >> "$1"
    				newline "$1"
    				echo -E "</html>" >> "$1"
    				;;
     
    			*)
    				;;
     
    		esac
    	fi	
    		files["$nbFiles"]="$1"
    		nbFiles=$(($nbFiles+1))
     
    	shift 1 || break
    done
     
     
    if [ "$horizontalSplit" -eq 1 ] && [ "$verticalSplit" -eq 0*]; then
    	vim -o "${files[@]}"
    elif [ "$horizontalSplit" -eq 1 ] && [ "$verticalSplit" -eq 1*]; then
     	echo "Vertical and horizontal split are not compatible" >&2
    	exit -1
    else
    	# I made the choice to enable vertical split by default,
    	# it's convenient when one forgets to add the -O option
    	vim -O "${files[@]}"
    fi
    Fichier headers.sh (script auxiliaire)
    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
    #!/bin/bash
    #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# #*#*#*#*#*#*#*#*
    # 
    # File: headers.sh
    # Author: Nabil Elqatib
    # Email: nabilelqatib@gmail.com
    # Date: 27/10/2016
    # Version: 1.0
    # Description: This script contains the variables and functions used in the 
    # 			   viim.sh file. 
    # #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*
     
    # environment variables, values of $author and $email
    #*to be changed to your personal information
    today=$(date +%d/%m/%Y)
    author="Nabil Elqatib"
    email="nabilelqatib@gmail.com"
     
    file_=$'File:'
    author_="Author: $author"
    email_="Email: $email"
    date_="Date: $today"
    descr_=$'Description: '
     
    # comment keywords #
    kw1="*"
    kw2="#"
    kw3="%"
     
    # comment lines begin/end #
    cl1_b=$'/********************************************************\n'
    cl1_e=$' *******************************************************/\n'
    cl2_b=$'#########################################################\n'
    cl2_e=$'#########################################################\n'
    cl3_b=$'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n'
    cl3_e=$'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n'
    cl4_b=$'<!-------------------------------------------------------\n'
    cl4_e=$'-------------------------------------------------------->\n'
     
    # Language specific templates #
    template_c=$'\n#include <stdio.h>\n#include <stdlib.h>\n\nint main()\n{\n\n\n\treturn EXIT_SUCCESS;\n}'
     
    template_cpp=$'\n#include <iostream>\n\nusing namespace std;\n\nint main()\n{\n\n\n\treturn 0;\n}'
     
    template_cs1=$'\nusing System;\n\nclass'
    template_cs2=$'\n{\n\n\n\tpublic static void Main()\n\t{\n\n\t}\n}'
     
    template_java1=$'\npublic class'
    template_java2=$'\n{\n\n\n\tpublic static void main(String args[])\n\t{\n\n\t}\n}'
     
    template_tex1=$'\documentclass[12pt]{article}\n\usepackage{comment}\n\usepackage{hyperref}\n\usepackage{color}\n\usepackage{caption}\n\usepackage[latin1]{inputenc}\n\usepackage[french]{babel}\n\usepackage[T1]{fontenc}\n\usepackage{amssymb}\n\usepackage{marthrsfs}\n\usepackage{graphicx}\n\usepackage{stmaryrd}\n\usepackage{lmodern}'
    template_tex2=$'\begin{document}\n\n\n\n\n\n\n\n\n\n\end{document}'
     
     
    newline(){
    	printf "\n" >> "$1"
    }
     
    # prints the corresponding shebang to the file given in argument
    shebang(){
    	ext=$(echo "$1"|sed 's/.*\.//g')
    	if [ "$ext" = "rb" ]; then
    		ext="ruby"
    	elif [ "$ext" = "py" ]; then
    		ext="python"
    	fi
    	shebang=$(which "$ext")
    	echo "#!$shebang" > "$1"
    }
     
    # not too expressive function name I have to admit...
    # use: f filename commentline_begin comment_kw commentline_end
    f(){
    	echo -E "$2$3 $file_ $fullName" >> "$1"
    	echo -E "$3 $author_" >> "$1"
    	echo -E "$3 $email_" >> "$1"
    	echo -E "$3 $date_" >> "$1"
    	echo -E "$3 $descr_" >> "$1"
    	echo -E "$4" >> "$1"
    }
    Lorsque vous aurez copié ces deux scripts en viim.sh et headers.sh, tapez la ligne de commande suivante dans votre terminal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo mv viim.sh headers.sh /usr/bin/
    , bien-sûr vous devez faire ça en tant qu'administrateur donc on vous demandera de taper votre mot de passe.

    Ceci étant fait, vous pouvez rajouter la ligne suivante dans votre fichier ~/.bashrc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alias vim='/usr/bin/viim.sh'
    Ceci crée un alias pour la commande vim. A chaque fois que vous invoquerez vim, cela exécutera le programme viim.sh.

    Toutes vos remarques/suggestions/commentaires seront les bienvenus!

  16. #56
    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
    @Marrakchino, l'approche usuelle avec vim est plutôt d'utiliser des plugins dédiés à l'expansion des templates/squelettes, ou de manière moins automatisée de snippets.
    Il y a une ribambelle de plugins, cf une liste non exhaustive sur wikia: http://vim.wikia.com/wiki/Category:A...Text_Insertion

    NB: je maintiens depuis belle lurette un fork de mu-template: https://github.com/LucHermitte/mu-template/. Je n'ai pas mis de screencast montrant l'ouverture de nouveaux fichiers, mais une série montrant l'expansion de snippets de classes C++ en fonction de leur sémantique et du dialecte (C++98, 11, 14,..)+options choisis -> https://github.com/LucHermitte/lh-cp...ss-non-virtual
    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...

  17. #57
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Merci @Luc, j'ai pensé à scripter en vim à proprement parler mais je n'ai pas encore appris le langage, c'est pour cette raison que j'ai du passer par Shell.
    Je vais jeter un œil aux liens.

  18. #58
    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
    Disons que les templates, ça commence avec `:h template`. Mais cela ne fait qu'insérer du texte. Après 2e génération, on commence à parser une série de tags bien définis. Puis on permet de remplacer des expressions suivant un format bien précis par leur résultat évalué. On rajoute ensuite une couche pour avoir des placeholders (pour dire où le curseur doit pouvoir sauter), et on peut encore aller plus loin:
    - avoir des templates qui exécutent du code (p.ex. si toto.h existe quand je crée toto.cpp, alors la requête d'inclusion du fichier d'en-tête est automatiquement insérée)
    - avoir la possibilité d'inclure automatiquement des cartouches de fichier (copyright & cie) qui soit spécialisables par projet
    - etc

    Le truc est que pour le coup des solutions qui font tout ça pour vim existent déjà et elles sont nombreuses. Elles savent faire plus ou moins de chose, avec une syntaxe plus ou moins simple.
    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...

  19. #59
    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 Affichage horloge
    Salut,

    Nom du script: horloge.sh

    Compatible avec: Bash

    Descriptif: script appelé par un autre script pour afficher la date et l'heure toutes les secondes en haut à droite de l'écran.

    Pré-requis: aucun

    Le script lui-même :
    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
     
    #!/bin/bash
    #set -x
     
    #
    #       Affichage date et heure en haut a doite de l'ecran
    #       Script a appeler par ./horloge.sh &
    #
    #       P. Goursonnet   11/05/2016 : Creation
     
    while true
    do
            sleep 1
            tput sc
            tput cup 0 $(($(tput cols)-19))
            echo -en $(date "+%Y/%m/%d %H:%M:%S")
            tput rc
    done

    L'appel par le script maître :
    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
     
    function sortie
    {
            if [ -f ./horloge.sh ]
            then
                    if ${PID_hor+"true"}; then kill -9 $PID_hor; fi
            fi
            exit 0
    }
    ...
    if [ -f ./horloge.sh ]
    then
            ./horloge.sh &
            PID_hor=$!
    fi
    Ce qui me donne ceci :
    Nom : stop_start.png
Affichages : 307
Taille : 4,3 Ko

    Pierre.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 376
    Points
    19 376
    Par défaut
    Bonjour,

    UUOE (Useless Use Of Echo), et UUOD (Useless Use Of Date) car/puisque Bash sait maintenant afficher des dates avec printf..
    késako if ${var+"true"} ?
    afficher "true" n'exécute pas [/c]true[/c].
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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