Forum Linux.debian/ubuntu Changement de date

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
8
août
2019
#!/bin/sh
dernierjourdumoisprecedent =`date --date "today - `date +%d`days" +%Y-%m-%d`
premierjourdumoisencours = `date --date'4 days ago'+%Y%m%d`
sed -i -- 's/201803/'$dernierjourdumoisprecedent'/g' fichier.txt
sed -i -- 's/2018-02-28/'$premierjourdumoisencours'/g' fichier.txt

Bonjour chers tous ! J'ai un problème avec mon script.

Lorsque j'exécute ces commandes simplement :

- $ date --date "today - `date +%d`days" +%Y-%m-%d
- $ date --date'4 days ago'+%Y%m%d

ça passe à merveille

Mais lorsque je l'exécute mon script bien-sûr (fichier.sh) il :

1- Affiche un message de ce genre
./fichier.sh:command substitution: line 3: caractère de fichier(EOF) prématuré lors de la recherche du <<">> correspondant
./fichier.sh:command substitution: line 4: erreur de syntaxe: fin de fichier prématuré

2- Lors du changement de la date dans mon fichier fichier.txt, le changement ne prend pas la valeur de mes variables mais
remplace mes dates qui sont dans mon fichier.txt par les variables elles mêmes.
Merci d'avance de bien vouloir m'aider

Cordialement!

  • # Une fois formaté…

    Posté par  . Évalué à 3. Dernière modification le 08 août 2019 à 12:38.

    Bonjour

    #!/bin/sh
    
    dernierjourdumoisprecedent=$(date --date "today - $(date +%d) days" +%Y-%m-%d)
    premierjourdumoisencours=$(date --date '4 days ago' +%Y%m%d)
    
    sed -i 's/201803/'$dernierjourdumoisprecedent'/g'   fichier.txt
    sed -i 's/2018-02-28/'$premierjourdumoisencours'/g' fichier.txt

    Mais, si on sépare chaque champ par un tiret,

    le premier jour du mois en cours serait plutôt:

    premierjourdumoisencours=$(date +%Y-%m-01)
    • [^] # Re: Une fois formaté…

      Posté par  . Évalué à 3. Dernière modification le 08 août 2019 à 12:45.

      Tu peux aussi écrire les lignes sed
      en utilisant des double guillemets :

      #!/bin/sh
      
      dernierjourdumoisprecedent=$(date --date "today - $(date +%d) days" +%Y-%m-%d)
      premierjourdumoisencours=$(  date --date "4 days ago"               +%Y%m%d)
      
      sed -i "s/201803/$dernierjourdumoisprecedent/g"   fichier.txt
      sed -i "s/2018-02-28/$premierjourdumoisencours/g" fichier.txt
      • [^] # Re: Une fois formaté…

        Posté par  . Évalué à 1.

        Bonjour merci pour votre aide et je viens d'essayer votre modification mais les variables ne changent toujours pas, elles se mettent à la place de leur valeur or moi c'est leur valeur que je veux.

        • [^] # Re: Une fois formaté…

          Posté par  . Évalué à 3.

          Essai en fermant les guillemets avant la variable et en les reluctant après

          sed -i -e "s/motif/"$variable"/g" $fichier
  • # .

    Posté par  . Évalué à 2.

    La solution de MicP fonctionne pourtant. Utilises-tu bien des guillemets ?

    Voici ce qu'il faut corriger dans ton script original, au cas ou tu serais interesse :
    - echapper les accents inverses embarques de la premiere ligne
    - enlever les espaces entres les signes '=' des deux premieres lignes.
    - ajouter un espace avant le signe '+' de la deuxieme ligne.

  • # 2 remarques

    Posté par  . Évalué à 3.

    1) ne pas utiliser les `, c'est moins lisible et peu pratique lors de leur usage en interne; leur préférer les $( ), plus lisible et facile à imbriquer ;)
    2) pas d'espace entre la variable et =

    ta première ligne donne 2 erreurs

     bash: dernierjourdumoisprecedent: commande inconnue...

    puis une fois celle-ci corrigée (pb espace)

    bash: command substitution: ligne 1: fin de fichier (EOF) prématurée lors de la recherche du « " » correspondant
    bash: command substitution: ligne 2: erreur de syntaxe : fin de fichier prématurée
    bash: command substitution: ligne 1: fin de fichier (EOF) prématurée lors de la recherche du « " » correspondant
    bash: command substitution: ligne 2: erreur de syntaxe : fin de fichier prématurée

    celle ci se corrige aisaiment en remplaçant les , par $(,); ou en protégeant les ` internes avec des \, mais c'est moche et continue de donner le mauvais exemple :P
    enfin, tu utilise 2 sed séparés pour modifier le même fichier (2 appels, 2 fork, 2 ouvertures…) c'est pas top
    tu peux exécuter les deux commandes en les séparant par un ;

    sed -i -- "s/201803/${dernierjourdumoisprecedent}/g;s/2018-02-28/${premierjourdumoisencours}/g" fichier.txt

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # Remerciement pour l'aide sur le script de changement de date

    Posté par  . Évalué à 2.

    Bonjour cher tous ! Je voudrais vous remercier pour votre aide. Mon script marche à merveille. Thanks

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.