[Linux-Shell-scripting] commande cat ou sed ?

Hitchy -  
Castor Messages postés 17881 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,

Je débute en programmation Shell et après avoir contourner mon problème, je me retrouve bloqué par un petit (à mon avis) problème : Explication.
Dans mon script, je dois créé un fichier .conf puis écrire plusieurs ligne dedans. Ces mêmes lignes contiennent des variables.
J'avais tout simplement penser à la commande cat >> essai.conf, puis ajouter à la suite l'intégralité de la conf avec ses variables; mais voilà !! c'est apparement pas aussi simple que ça...j'ai essayer en rajoutant des "" ou ( ) ou encore ``, mais rien ne fonctionne.

J'ai ensuite essayer la commande sed -n 1p essai.conf mais je retombe sur le même problème.

Donc voilà ma question : Comment ajouter un texte complet contenant des variables dans un fichier vide (le tout dans un fichier de shell-scripting) ?

10 réponses

  1. Castor Messages postés 17881 Date d'inscription   Statut Modérateur Dernière intervention   170
     
    il faut "echapper" les caracteres speciaux de ta configuration avec des "\"
    par exemple $toto deviens \$toto
    0
    1. Bobinours Messages postés 2903 Statut Membre 504
       
      Mouahahah !! Sans déconner ! Je fais une recherche "paramètre linux caractères à échapper" et je tombe sur une réponse de ce cher Castor dit Queue-Plate !

      Bon... Manque de pot, je cherchais les dits caractères qu'il faut échapper dans les paramètres de commandes Linux. Exemple :
      htpasswd -mb utilisateur MdP_avec_pleins_de_caract_à_échapper_mais_lesquels?

      Désolé pour le voyage dans le temps :P
      0
      1. Castor Messages postés 17881 Date d'inscription   Statut Modérateur Dernière intervention   170 > Bobinours Messages postés 2903 Statut Membre
         
        Pfff tu aurais plus vite fait de m'appeler :)

        Soit tu parses ton MdP_avec_pleins_de_caract_à_échapper_mais_lesquels? avec sed et tu remplaces les caracteresspéciaux (en général c'est $,/,\,#,?,*,.,>,< mais je peux en oublier)
        Soit tu encadres ton MdP_avec_pleins_de_caract_à_échapper_mais_lesquels par des '' ou des ""
        0
  2. Hitchy
     
    OK merci pour les caractères spéciaux mais pour le reste du texte
    Voilà la partie du script qui me pose problème :
    -----------------------------------
    #!/bin/sh
    #

    cat >>essai.conf
    "bonjour ceci est une ligne avec \$unevariable
    EOF
    ------------------------------------

    1)Il crée bien le fichier essai.conf, mais il n'y a rien dedans
    J'ai essayé en passant par la commande echo, mais toujours rien dans mon fichier.
    2)Il ne prend pas en compte le EOF, cad que je suis obligé de faire le ctrl-d manuellemnt pour quitter cat

    Je pense que ça tient à pas grand chose....
    0
  3. Castor Messages postés 17881 Date d'inscription   Statut Modérateur Dernière intervention   170
     
    essaie ca:
    cat 
    "bonjour ceci est une ligne avec \$unevariable >>essai.conf
    0
    1. Hitchy
       
      Merci castor, mais ça ne fonctionne pas non plus....
      J'ai essayé :
      cat
      "bonjour ceci est une ligne avec \$unevariable >>essai.conf

      cat
      "bonjour ceci est une ligne avec \$unevariable" >>essai.conf

      j'ai même essayer de remplacer les "" par des ( ) ou {} ou ' ' ou `` ou encore [] mais rien du tout.....

      Si il y a des gens qui ont des idées....peut être avec sed..?

      Juste pour info, j'ai plusieurs lignes à insérer.
      0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Essaie ça :
    [jp@Mandrake tmpfs]$ echo "Ceci est une variable : \$var." >> essai.conf
    [jp@Mandrake tmpfs]$ cat essai.conf
    Ceci est une variable : $var.
    [jp@Mandrake tmpfs]$ echo "Ceci est une autre variable : \$var2." >> essai.conf
    [jp@Mandrake tmpfs]$ cat essai.conf
    Ceci est une variable : $var.
    Ceci est une autre variable : $var2.
    [jp@Mandrake tmpfs]$
    ;-))
    0
    1. Hitchy
       
      Nickel !!!!
      C'est exactement ce doit j'avais besoin.
      Sauf que je n'ai pas eu à mettre le "\" devant mes variables.
      Est ce parce que ce sont des adresses IP ? je ne sais pas.

      Mes lignes dans mon script ressemble desormais à cela :
      echo "Ceci est une autre variable : $var2 ." >> essai.conf

      Pour info, sur une ligne, j'ai 2 variables(@IP) collé par un tiret "-",
      j'ai du noter comme cela :
      echo "blabla ${IPDESTINATAIRE}-${IPLOCALE} blabla" >>essai.conf

      Merci pour tout, tu m'as enlevé une grande épine du pied !!!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Xenor Messages postés 3312 Statut Contributeur 51
     
    Salut,
    Si tu mets pas de \ devant les $, il va afficher le contenu de la variable, et non pas son nom. Ou alors il faut remplacer les " par des simple '.
    Mais apparemment ça te satisfait donc ça roule.
    Pour info, et si tu poursuis ton travail dans cette voie, d'autre options très utiles peuvent te servir : les arguments -n et -e pour la commande echo. A explorer.
    0
  7. np34 Messages postés 21 Statut Membre 5
     
    il y a beaucoup plus simple en shell pour insérer du text dans un autre fichier :
    cat > fichier_à_créer << BALISEDEFIN
    ici tu mets tout le contenu du fichier_à_créer
    formaté comme tu veux
    voila c'est tout bon
    BALISEDEFIN
    

    Voilou
    0
  8. LOLITA_SOUM
     
    j'ai un script executable sur mon pc mai pas avec des autres il lence un programme et il affiche le signal d'interruption

    #!/bin/bash
    cat /usr/include/asm/signal.h | grep "define SIG" | awk '{ print $2 " " $NF }'
    ./ton_programme_c.c

    le program est

    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>

    void sigfpe_handler(int signum)
    {
    printf("Exception détectée!\n");
    exit(EXIT_FAILURE);
    }

    int main(void)
    {
    struct sigaction new_action;

    new_action.sa_handler = sigfpe_handler;
    sigemptyset(&new_action.sa_mask);

    sigaction(SIGFPE, &new_action, NULL);

    int a, b, c;
    a = 10; b=0;
    c = a/b;

    return EXIT_SUCCESS;
    }
    0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    cat /usr/include/asm/signal.h | grep "define SIG" | awk '{ print $2 " " $NF }'
    peut être simplifié:
    awk '/define SIG/ { print $2 " " $NF }' /usr/include/asm/signal.h

    tu essayes d'exécuter le source .c ou ton prog. est-il compilé ?
    ./ton_programme_c.c
    0
  10. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    correction du post 11
    awk '/define SIG/ { print $2 " " $NF }' < /usr/include/asm/signal.h
    0