Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction sauvegarder un fichier en bash

    21 juillet 2017 à 7:05:37

    Bonjour j'ai un petit  problème, j'écris pour m'entraîner un script bash qui permet de créer sa configuration pour le jeux csgo.

    Je souhaiterais après avoir modifié mes touches (binds) de mouvements, faire une sauvegarde du fichier afin que les modifications soit prisent en compte.

    Quelle commande peut faire ça ?

    j'ai vu et lu sur la commande "tar", mais il ne me semble pas que cette commande soit appropriée ou alors j'ai mal compris.

    Vos avis svp ?




    • Partager sur Facebook
    • Partager sur Twitter
      21 juillet 2017 à 8:37:08

      Bonjour,

      Peux tu nous montrer comment tu as fais ton script ?

      Car si en bash tu ajoutes des lignes avec les chevrons ">>", par exemple, le fichier se sauvegarde, on vas dire, tout seul.

      Cordialement.

      • Partager sur Facebook
      • Partager sur Twitter
      La pomme, le drapeau et le manchot ...
        21 juillet 2017 à 10:41:14

        salut,

        une sauvegarde, c'est une copie (cp).

        tar crée des archives, c'est-à-dire qu'il enregistre plusieurs fichiers dans un seul fichier.

        pour une description des commandes de bases, voir info coreutils.

        • Partager sur Facebook
        • Partager sur Twitter

        Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

          21 juillet 2017 à 10:52:15

          ok merci pour vos réponses, je vais voir ce que je peux faire avec vos infos.

          Sinon voici le script tel qu'il est actuellement  :

          #!/bin/bash
          
          echo -e "Bonjour, voici un programme qui va vous aider pas a pas a la configuration de votre fichier config.cfg du jeux csgo\n"
          
          echo "Pour commencer comment voulez vous nommer votre fichier cfg : exemple thibault.cfg"
          read cfg_File
          
          cd /home/thibault/Bureau
          
          if [ ! -e $cfg_File ]
          then
          	echo -e "Creation du fichier $cfg_File....."
          	touch $cfg_File
          	cat Bob.cfg > $cfg_File
          else
          	echo "le fichier existe déjà, passons a la suite"
          	cat Bob.cfg > $cfg_File
          fi
          
          #echo -e "\nVotre fichier de configuration s'apelle $cfg_File\n\n"
          #echo -e  "Voici son contenu\n"
          #export content="$(cat $cfg_File)"
          #echo -e "\n$content"
          
          
          
          reponse="n"
          
          while [ $reponse = 'n' ]
          do
          
          	echo -e "\nNous allons maintenant configurer vos mouvement\n"
          	read -p "Entrez la touche pour avancer : " avancer
          	read -p "Entrez la touche pour reculer : " reculer
          	read -p "Entrez la touche pour aller a droite : " droite
          	read -p "Entrez la touche pour aller a gauche : " gauche
          
          	echo -e "\nJe récapitule : \n"
          	echo -e "avancer : $avancer\n"
          	echo -e "reculer : $reculer\n"
          	echo -e "aller a droite: $droite\n"
          	echo -e "aller a gauche : $gauche\n"
          
          	read -p "Voulez vous conserver ces touches y/n : " reponse
          done
          
          cd /home/thibault/Bureau
          sed -n 's/bind "z" "+forward"/bind "'$avancer'" "+forward"/' $cfg_File
          #sed -n 's/bind "s" "+back"/bind "'$reculer'" "+back"/' = $cfg_File
          #sed -n 's/bind "d" "+moveright"/bind "'$droite'" "+moveright"/' = $cfg_File
          #sed -n 's/bind "q" "+moveleft"/bind "'$gauche'" "+moveleft"/' = $cfg_File
          #echo -e "Voici les binds actuels de votre fichier $cfg_File\n"
          #grep -n bind $cfg_File
          
          
          
          #commencez par les binds
          #faire sortir toutes les lignes bind avec la cmd grep et export et cat
          
          # demander touches par touche les bind qu'il souhaite :
          # avancer, reculer, droite , gaauche, sauter, s'accroupir
          # arme principale, arme secondaire
          # binds pour les grenades : fragmentation, flash, fumigène, moltov, leurre
          



          -
          Edité par Code Rom 21 juillet 2017 à 10:52:36

          • Partager sur Facebook
          • Partager sur Twitter
            21 juillet 2017 à 11:09:45

            le premier test est inutile, puisque si le fichier existe tu l'écrases.
            s'il n'existe pas il sera créé.

            et cat aussi est inutile; une simple copie du fichier sera satisfaisante.

            les variables doivent toujours être entre guillemets, surtout dans les tests.

            tu pourrais avant de demander si l'utilisateur veut changer les touches de mouvement, lui présenter celles utilisées actuellement...
            si l'utilisateur ne répond pas à une question, alors la valeur actuelle sera utilisée
            puis ne modifier le fichier que si l'utilisateur a modifié les touches, tu peux comparer la variable avec la valeur définie dans le fichier.

            enfin, pour répondre à ta question, il faut ajouter l'option -i (--in-place) à ta/es commande(s) sed.

            -
            Edité par dantonq 21 juillet 2017 à 11:13:18

            • Partager sur Facebook
            • Partager sur Twitter

            Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

              21 juillet 2017 à 11:17:47

              Après avoir régler les petit soucis citer,

              Tu peux utiliser la solution suivante avec echo :

              echo  $avancer >> $cfg_File

              Cela va ajouter a la fin de ton fichier le contenu de ta variable.

              • Partager sur Facebook
              • Partager sur Twitter
              La pomme, le drapeau et le manchot ...
                21 juillet 2017 à 12:24:24

                Merci a vous je vais corriger tout cela.

                EDIT Très long : xD

                Bon le scirpt avance bien, mais j'ai un problème , je souhaiterais récuperer (vous allez comprendre par la suite) , un caractère dans une ligne d'un fichier texte.

                Ya t il une commande pour faire cela ?

                Je m'explique, prenons le cas ou l'utilisateur ne rentre rien a la demande des binds de mouvement qu'il souhaite, le script va donc lui attribuer les binds déjà fait du fichier de réference.Or là est le problème j'arrive pour avancer part exple a récuperer la chaine : bind z +forward, or moi je souhaiterais ne récuperer que le caractère z. Vous voyez ?

                Alors le script fonctionne les modifications se font dans le fichier, mais dans ce scenario précis la commande sed me renvois une erreur.

                Voici le script :

                #!/bin/bash
                
                echo -e "Bonjour, voici un programme qui va vous aider pas a pas a la configuration de votre fichier config.cfg du jeux csgo\n"
                
                echo "Pour commencer comment voulez vous nommer votre fichier cfg : exemple thibault.cfg"
                read cfg_File
                
                cd /home/thibault/Bureau
                
                
                echo -e "Creation du fichier $cfg_File.....\n"
                touch $cfg_File
                cp Bob.cfg $cfg_File
                
                
                #echo -e "\nVotre fichier de configuration s'apelle $cfg_File\n\n"
                #echo -e  "Voici son contenu\n"
                #export content="$(cat $cfg_File)"
                #echo -e "\n$content"
                
                echo -e "Voici les binds de mouvement actuelement dans le fichier de configuration : \n"
                grep -n +forward $cfg_File
                grep -n +back $cfg_File
                grep -n +moveright $cfg_File
                grep -n +moveleft $cfg_File
                
                reponse="n"
                
                while [ "$reponse" = 'n' ]
                do
                
                	echo -e "\nNous allons maintenant configurer vos propre mouvements.\n"
                	echo -e "\033[31mAttention pour conserver une des valeures précedentes appuyez simplement sur entrée !\n\033[0m"
                	read -p "Entrez la touche pour avancer : " avancer
                	read -p "Entrez la touche pour reculer : " reculer
                	read -p "Entrez la touche pour aller a droite : " droite
                	read -p "Entrez la touche pour aller a gauche : " gauche
                
                	if [ -z "$avancer" ]
                	then
                		avancer="$(grep +forward $cfg_File)"
                	fi
                
                	if [ -z "$reculer" ]
                	then
                		reculer="$(grep +back $cfg_File)"
                	fi
                
                	if [ -z "$droite" ]
                	then
                		droite="$(grep +moveright $cfg_File)"
                	fi
                
                	if [ -z "$gauche" ]
                	then
                		gauche="$(grep +moveleft $cfg_File)"
                	fi
                
                	echo -e "\nJe récapitule : \n"
                	echo -e "avancer : $avancer\n"
                	echo -e "reculer : $reculer\n"
                	echo -e "aller a droite: $droite\n"
                	echo -e "aller a gauche : $gauche\n"
                
                	read -p "Voulez vous conserver ces touches y/n : " reponse
                done
                
                cd /home/thibault/Bureau
                if [ ! -z "$avancer" ]
                then
                	sed -i 's/bind "z" "+forward"/bind "'$avancer'" "+forward"/' $cfg_File
                fi
                
                sed -i 's/bind "s" "+back"/bind "'$reculer'" "+back"/' $cfg_File
                sed -i 's/bind "d" "+moveright"/bind "'$droite'" "+moveright"/' $cfg_File
                sed -i 's/bind "q" "+moveleft"/bind "'$gauche'" "+moveleft"/' $cfg_File
                
                echo -e "\nVoici les binds de mouvements de votre fichier $cfg_File\n"
                grep -n +forward $cfg_File
                grep -n +back $cfg_File
                grep -n +moveright $cfg_File
                grep -n +moveleft $cfg_File
                
                
                
                
                
                
                #commencez par les binds
                #faire sortir toutes les lignes bind avec la cmd grep et export et cat
                
                # demander touches par touche les bind qu'il souhaite :
                # avancer, reculer, droite , gaauche, sauter, s'accroupir
                # arme principale, arme secondaire
                # binds pour les grenades : fragmentation, flash, fumigène, moltov, leurre
                


                et le résultat dans la console quand je ne renseigne rien a la demande des touches de mouvements :

                Bonjour, voici un programme qui va vous aider pas a pas a la configuration de votre fichier config.cfg du jeux csgo
                
                Pour commencer comment voulez vous nommer votre fichier cfg : exemple thibault.cfg
                thib.cfg
                Creation du fichier thib.cfg.....
                
                Voici les binds de mouvement actuelement dans le fichier de configuration : 
                
                15:bind "z" "+forward"
                14:bind "s" "+back"
                6:bind "d" "+moveright"
                12:bind "q" "+moveleft"
                
                Nous allons maintenant configurer vos propre mouvements.
                
                Attention pour conserver une des valeures précedentes appuyez simplement sur entrée !
                
                Entrez la touche pour avancer : 
                Entrez la touche pour reculer : 
                Entrez la touche pour aller a droite : 
                Entrez la touche pour aller a gauche : 
                
                Je récapitule : 
                
                avancer : bind "z" "+forward"
                
                reculer : bind "s" "+back"
                
                aller a droite: bind "d" "+moveright"
                
                aller a gauche : bind "q" "+moveleft"
                
                Voulez vous conserver ces touches y/n : y
                sed: -e expression n°1, caractère 32: commande `s' inachevée
                sed: -e expression n°1, caractère 29: commande `s' inachevée
                sed: -e expression n°1, caractère 34: commande `s' inachevée
                sed: -e expression n°1, caractère 33: commande `s' inachevée
                
                Voici les binds de mouvements de votre fichier thib.cfg
                
                15:bind "z" "+forward"
                14:bind "s" "+back"
                6:bind "d" "+moveright"
                12:bind "q" "+moveleft"
                

                On voit déjà  que quand je récapitule, j'ai :

                avancer : bind "z" "+forward"
                
                reculer : bind "s" "+back"
                
                aller a droite: bind "d" "+moveright"
                
                aller a gauche : bind "q" "+moveleft"


                et non pas :

                avancer : z
                
                reculer : s
                
                aller a droite: d
                
                aller a gauche : q

                 On voit aussi les erreurs des lignes avec la commande sed :

                sed: -e expression n°1, caractère 32: commande `s' inachevée
                sed: -e expression n°1, caractère 29: commande `s' inachevée
                sed: -e expression n°1, caractère 34: commande `s' inachevée
                sed: -e expression n°1, caractère 33: commande `s' inachevée

                 Donc je récapitule ma question : comment récupérer un seul caractère dans une ligne d'un fichier texte en bash ?

                Merci

                -
                Edité par Code Rom 22 juillet 2017 à 14:11:30

                • Partager sur Facebook
                • Partager sur Twitter

                fonction sauvegarder un fichier en bash

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown