Forum Programmation.shell passage de variable à une commande

Posté par  . Licence CC By‑SA.
Étiquettes :
0
2
sept.
2021

c'est très bizarre, en juillet mon script fonctionnait super bien et la paf il marche plus. je l'avais utiliser pas mal de fois et je ne me souviens pas d'avoir fait des modif, si par hasard il y a une poutre dans mon oeuil j'aimerais beaucoup que quelqu'un me l'enlève!

il convertit du pdf (document.pdf) en tif pour pouvoir extraire un code barre puis le replacer en datamatrix dans le fichier initial .tif

NB : j'ai du placer un _ devant certaines variables vu que bizarrement linuxfr me le transforme en {mathjax}

#!/bin/bash

for i in *.pdf
do 
   vips copy _$i[page=4,dpi=300] ${i%%.*}.tif[compression=jpeg,Q=40]

   echo $i        #pour verifier si ca se passe bien -> oui
   echo ${i%%.*}  #pour verifier si ca se passe bien -> oui

   nom=_$(zbarimg ${i%%.*}.tif 2>/dev/null | awk -F "CODE-39:" '{ print _$2}'); tableau=(${nom// / })

   echo $nom #pour verifier si ca se passe bien -> oui

   for m in ${tableau[@]}
   do
      echo $m | tr -d "\n" | dmtxwrite -m 20 -d 9 -s 18x18 -o $m.tif

      echo $m #pour verifier si ca se passe bien -> oui
   done

   echo "après la boucle"  #pour verifier si ca se passe bien -> oui
   echo $i                 #pour verifier si ca se passe bien -> oui
   echo ${i%%.*}.tif       #pour verifier si ca se passe bien -> oui

#la cela merde ->>>
   vips insert _${i%%.*}.tif "_${tableau[5]}.tif" ${i%%.*}5.tif[compression=jpeg] 1750 288
done

resumé de la commande : vips imageinitial.tif datmatrix.tif imagefinal.tif positiondudatamatrix X Y

message d'erreur :

VipsForeignLoad: file ".tif" not found

${i%%.*}.tif n'est pas remplacer par la valeur de la variable :( "document", j'ai essayer eval sans succées devant la ligne

NdM : remise en forme du code, et déplacement de la precision du _$Variable avant le code

  • # dans un cas comme le tiens, je simplifie

    Posté par  . Évalué à 4.

    for I in *.pdf
    do
    action sur ${i%%.*}.tif

    devient alors

    for I in *.pdf
    do
       # ici je fixe définitivement le nom de mon fichier sans extension
       NOMFICHIER=${i%%.*}
       action sur ${NOMFICHIER}.tif
    
       for X in Y Z
       do
          autre action sur ${NOMFICHIER}-X.toto
       done
    done
  • # Variable tableau

    Posté par  . Évalué à 2.

    Il semble probable que le problème ne vienne pas de ton '${i%%.*}.tif' mais de ton
    '${tableau[5]}.tif'. En effet si cette variable n'est pas renseignée correctement on obtient également le message d'erreur que tu as mentionné.

    Si je comprends bien pour avoir 6 éléments dans ton tableau il faudrait donc qu'il y ait 6 "CODE-39:" dans ton fichier tif de départ. Est-ce bien le cas ?

    • [^] # Re: Variable tableau

      Posté par  . Évalué à 1.

      ah pas mal, effectivement la mise en page a été modifier pendant mes vacances, il me semble que les code barre sont sur 2 pages au lieu d'une. je vais contrôler cela.

      merci

  • # Shellcheck

    Posté par  . Évalué à 2.

    Étant moi-même adepte de l'écriture de scripts bash, souvent fort mauvais d'ailleurs, j'ai pris l'habitude de systématiquement leur passer un coup de shellcheck.
    Ça aide à dépoutrer ;-)

    • [^] # Re: Shellcheck

      Posté par  . Évalué à 2.

      Je recommande aussi,

      Je viens de le faire passer et il y a pas mal d'avertissement et 2 erreurs.
      Ils concernent tous le globbing et word-splitting.

      #!/bin/bash
      
      for i in *.pdf
      do 
         vips copy _"$i"[page=4,dpi=300] "${i%%.*}".tif[compression=jpeg,Q=40]
         echo "$i"        #pour verifier si ca se passe bien -> oui
         echo "${i%%.*}"  #pour verifier si ca se passe bien -> oui
      
         nom=_$(zbarimg "${i%%.*}".tif 2>/dev/null | awk -F "CODE-39:" '{ print _$2}'); tableau=("${nom// / }")
         echo "$nom" #pour verifier si ca se passe bien -> oui
      
         for m in "${tableau[@]}"
         do
            echo "$m" | tr -d "\n" | dmtxwrite -m 20 -d 9 -s 18x18 -o "$m.tif"
      
            echo "$m" #pour verifier si ca se passe bien -> oui
         done
      
         echo "après la boucle"  #pour verifier si ca se passe bien -> oui
         echo "$i"                 #pour verifier si ca se passe bien -> oui
         echo "${i%%.*}.tif"       #pour verifier si ca se passe bien -> oui
      
      #la cela merde ->>>
         vips insert _"${i%%.*}.tif" "_${tableau[5]}.tif" "${i%%.*}5.tif[compression=jpeg]" 1750 288
      done

      me donne

      In vc line 5:
         vips copy _"$i"[page=4,dpi=300] "${i%%.*}".tif[compression=jpeg,Q=40]
                        ^--------------^ SC2102: Ranges can only match single chars (mentioned due to duplicates).
                                                       ^---------------------^ SC2102: Ranges can only match single chars (mentioned due to duplicates).
      
      For more information:
        https://www.shellcheck.net/wiki/SC2102 -- Ranges can only match single char...
      

      Amiralgaby#1847

  • # merci a tous

    Posté par  . Évalué à 2. Dernière modification le 05 septembre 2021 à 22:37.

    bonjour

    merci a tous, je vais regarder cela lundi au boulot, ca devrait bien se passer. je ne connaissait pas le dernier logiciel cela va me faire avancer je pense.

Suivre le flux des commentaires

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