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 :

Aide a la traduction d'un .bat en .sh


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Aide a la traduction d'un .bat en .sh
    Bonjour,

    Alors voilà j'ai rédigé un fichier .bat permettant de selectionner dans un fichier readme une partie et de la copié dans un fichier markdown vide avec une entete. Et après l'avoir présenté à mon maitre de stage il me dit que finalement on va le mettre sur le serveur linux et donc il me faudrait un fichier shell mais je n'y connais pas grand chose et je cherche des choses assez spécifiques je pense car après plusieurs recherche ici et sur internet je n'ai pas trouvé d'aide très pertinente

    Voila le .bat

    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
     
    @echo off
     
    set "file=readme.txt" 
     del /q /f out.file*
     del /q /f version902002*
     
    setlocal enableDelayedExpansion
    set out_file_counter=0
    set out_file_counter_old = 0
     
    for /f "usebackq delims=" %%L in ("%file%") do (
     
     set line=%%L
     
     
      if "!line:~0,13!" equ "# Description" (
    	 set line_desc="!line:~16,100!"
    	 set desc= description =!line_desc!
      )
     
      if "!line:~0,9!" equ "# Version" (
    	 set line_parent="!line:~16,7!"
    	 set parent= parent=!line_parent!
      )
     
      if "!line:~0,8!" equ "# Author" (
    	 set line_author="!line:~16,20!"
    	 set author= creatordisplayname=!line_author!
      )
     
     
      if "!line:~0,7!" equ "# Point" (
         set /A line_point = "!line:~16,5!"
    	 set title= title="!line_point!"
    	 set identifier= identifier="!line_point!"
      )
     
     
      if "!line:~0,1!" equ "|" (
     
        set draft= draft ="true"
        set date= date =""
        set menu=[menu.main]   
     
     
     
        set /A out_file_counter_old = "!out_file_counter!" 
     
        echo +++>>out.file.!out_file_counter!
    	echo !draft!>>out.file.!out_file_counter!
        echo !title!>>out.file.!out_file_counter!
        echo !desc!>>out.file.!out_file_counter!
        echo !date!>>out.file.!out_file_counter!
    	echo.>>out.file.!out_file_counter!
    	echo !author!>>out.file.!out_file_counter!
    	echo.>>out.file.!out_file_counter!
        echo !menu!>>out.file.!out_file_counter!
    	echo.>>out.file.!out_file_counter!
        echo !parent!>>out.file.!out_file_counter!
        echo !identifier!>>out.file.!out_file_counter!
        echo +++>>out.file.!out_file_counter!
     
     
    	if out_file_counter GTR 1  (
         if  out_file_counter_old NEQ out_file_counter (
            rename out.file.!out_file_counter_old! version902002-!out_file_counter_old!-!line_point!.md				 
    	 )
        )
        set /a out_file_counter=out_file_counter+1	  	
      )
     
      echo !line!>>out.file.!out_file_counter!  
     
     
    )
     
    rename out.file.!out_file_counter! version902002-!out_file_counter!-!line_point!.md
    del /q /f out.file*
     
    endlocal
    Et le début du .sh
    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
     
    # @ECHO OFF
     
    export "file=readme.txt"
     
    	rm /q /f out.file*
    	rm /q /f version902002*
     
    export out_file_counter=0
    export out_file_counter_old=0
     
    for %%L in ["%file%"];
      do
        export line=%%L
     
      done
    Je voudrais que quelqu'un m'aide à "traduire" mon fichier pour pouvoir l'utiliser sur linux, ou alors que l'on m'explique comment faire.

    Merci !
    Bonne journée !

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    je ne sais pas comment marche le .bat

    mais ce que je peux indiquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for %%L in ["%file%"];
      do
        export line=%%L
     
      done
    en bash/sh/ksh (quelques shell linux) : une variable simple s'écrit $toto ${toto} si on veux la "protéger" proprement
    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for litefichier in * ; do faire -action sur ${listefichier} ; done
    peut aussi s'écrire sur plusieurs lignes bien sur tel que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for listefichier in * 
    do 
      faire -action sur ${listefichier}
    done
    les options ne se mettent pas avec des / mais des - et la chaine d'options à parser...
    par exemple
    rm -rf toto ou rm -r -f toto detruiront sans confirmation le repertoire toto et tout ce qui est dessous
    on peut aussi passer (une bonne pratique dans les scripts l'option fullqualified

    par exemple

    commande --update-cache plutot que commande -u qui fait pareil mais moins lisible .... (important pour documenter le code de ses scripts)

    les commentaires en shell sont en général # suivi de ce qu'on veut.

    une bonne pratique est d'utiliser le shebang d'appel de l'environnement du shell choisi plutot que le shell

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/bash 
    # cas normal d'appel du shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/usr/bin/env bash
    # appel de l'environnement complet du bash
    y'a plétore de bons tuto sur google...

    et note ment http://ineumann.developpez.com/tutor...nes-pratiques/

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup je comprends un peu mieux

    Et est-ce que tu pourrais me parler du grep ? Et m'expliquer ses differents fonctionnement dans le cas ou je voudrais prendre des string dans mon fichier et les mettre dans une variable ?

    Cordialement.

  4. #4
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    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
    francois@h2g2:~$ cat > toto
    dsfsdfq
    rezra
    xwcxc
    fsd
    francois@h2g2:~$ grep -i a toto # chercher a ou A inconditionnel 
    rezra
    francois@h2g2:~$ toto=$(grep -i a toto) # charge la ligne remonté par grep dans la variable toto
    francois@h2g2:~$ echo ${toto}
    rezra
    francois@h2g2:~$ grep -v [rxF] toto # cherche les lignes ne contenant pas rxF (petit f est permis)
    dsfsdfq
    fsd
    francois@h2g2:~$ grep ^f toto #  commence par f uniquement                                                                                                                                           
    fsd
    voilà quelques exemple dont 1 avec chargement d'une variable

    l'aide de grep :
    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
     
    francois@h2g2:~$ grep --help  #99% des commandes ont une aide primaire sous cette forme
    Usage: grep [OPTION]... PATTERN [FILE]...
    Search for PATTERN in each FILE or standard input.
    PATTERN is, by default, a basic regular expression (BRE).
    Example: grep -i 'hello world' menu.h main.c
     
    Regexp selection and interpretation:
      -E, --extended-regexp     PATTERN is an extended regular expression (ERE)
      -F, --fixed-strings       PATTERN is a set of newline-separated fixed strings
      -G, --basic-regexp        PATTERN is a basic regular expression (BRE)
      -P, --perl-regexp         PATTERN is a Perl regular expression
      -e, --regexp=PATTERN      use PATTERN for matching
      -f, --file=FILE           obtain PATTERN from FILE
      -i, --ignore-case         ignore case distinctions
      -w, --word-regexp         force PATTERN to match only whole words
      -x, --line-regexp         force PATTERN to match only whole lines
      -z, --null-data           a data line ends in 0 byte, not newline
     
    Miscellaneous:
      -s, --no-messages         suppress error messages
      -v, --invert-match        select non-matching lines
      -V, --version             display version information and exit
          --help                display this help text and exit
     
    Output control:
      -m, --max-count=NUM       stop after NUM matches
      -b, --byte-offset         print the byte offset with output lines
      -n, --line-number         print line number with output lines
          --line-buffered       flush output on every line
      -H, --with-filename       print the file name for each match
      -h, --no-filename         suppress the file name prefix on output
          --label=LABEL         use LABEL as the standard input file name prefix
      -o, --only-matching       show only the part of a line matching PATTERN
      -q, --quiet, --silent     suppress all normal output
          --binary-files=TYPE   assume that binary files are TYPE;
                                TYPE is 'binary', 'text', or 'without-match'
      -a, --text                equivalent to --binary-files=text
      -I                        equivalent to --binary-files=without-match
      -d, --directories=ACTION  how to handle directories;
                                ACTION is 'read', 'recurse', or 'skip'
      -D, --devices=ACTION      how to handle devices, FIFOs and sockets;
                                ACTION is 'read' or 'skip'
      -r, --recursive           like --directories=recurse
      -R, --dereference-recursive  likewise, but follow all symlinks
          --include=FILE_PATTERN  search only files that match FILE_PATTERN
          --exclude=FILE_PATTERN  skip files and directories matching FILE_PATTERN
          --exclude-from=FILE   skip files matching any file pattern from FILE
          --exclude-dir=PATTERN  directories that match PATTERN will be skipped.
      -L, --files-without-match  print only names of FILEs containing no match
      -l, --files-with-matches  print only names of FILEs containing matches
      -c, --count               print only a count of matching lines per FILE
      -T, --initial-tab         make tabs line up (if needed)
      -Z, --null                print 0 byte after FILE name
     
    Context control:
      -B, --before-context=NUM  print NUM lines of leading context
      -A, --after-context=NUM   print NUM lines of trailing context
      -C, --context=NUM         print NUM lines of output context
      -NUM                      same as --context=NUM
          --color[=WHEN],
          --colour[=WHEN]       use markers to highlight the matching strings;
                                WHEN is 'always', 'never', or 'auto'
      -U, --binary              do not strip CR characters at EOL (MSDOS/Windows)
      -u, --unix-byte-offsets   report offsets as if CRs were not there
                                (MSDOS/Windows)
     
    'egrep' means 'grep -E'.  'fgrep' means 'grep -F'.
    Direct invocation as either 'egrep' or 'fgrep' is deprecated.
    When FILE is -, read standard input.  With no FILE, read . if a command-line
    -r is given, - otherwise.  If fewer than two FILEs are given, assume -h.
    Exit status is 0 if any line is selected, 1 otherwise;
    if any error occurs and -q is not given, the exit status is 2.
     
    Report bugs to: bug-grep@gnu.org
    GNU Grep home page: <http://www.gnu.org/software/grep/>
    General help using GNU software: <http://www.gnu.org/gethelp/>
    francois@h2g2:~$
    et quasi toutes commandes ont des pages de manuel

    mais avant il est bon de lire le manuel du manuel
    C'est le réflexe de base à aquerir pour apprendre linux et ses commandes

    les docs sont souvent super bien faites faut pas hésiter....

    pour grep tu as peut êttre remarqué que le pattern à rechercher est géré sous forme de regexp (expréssion régulière) ....
    ça veut dire un format plus ou moins général et surtout préférentiel https://www.cyberciti.biz/faq/grep-regular-expressions/

    une regexp peut être complexe genre ça si tu lis le document proposé tu saura ce que ça veut lire comme format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup pour tout ça et pour ton temps, maintenant je vais m'y coller ahah

    Bonne journée !

Discussions similaires

  1. Aide requête de traduction
    Par mespada dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/05/2015, 11h43
  2. Traduction ksh en .bat
    Par ppm973 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 17/03/2010, 11h01
  3. Aide sur la traduction de c++ vers delphi
    Par fartoto_dz2004 dans le forum Langage
    Réponses: 5
    Dernier message: 26/08/2009, 11h10
  4. Outils d'aide a la traduction de bundle java
    Par hugo123 dans le forum Général Java
    Réponses: 0
    Dernier message: 25/06/2009, 22h12
  5. Réponses: 3
    Dernier message: 09/12/2007, 14h46

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