# SCRIPT SHELL: Correction de code

**URL:** <https://www.debian-fr.org/t/script-shell-correction-de-code/64137>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 9:01 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137 "2016-02-21T21:01:53Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![vandman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/50afbb/32.png) [@vandman](https://www.debian-fr.org/u/vandman)\
**Post date:** [Février 21, 2016, 9:01 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/1 "2016-02-21T21:01:53Z")

</div>

Bonjour,

J’ai une betise dans mon code. Pouvez vous m’aider a le corriger?

je cherche à créer un fichier en récupérant le nom dans un autre fichier qui contient une liste.

[code]csv\_DirectoryLocation=$(pwd)

echo -n "Le fichier liste des groupes se trouve-t-il dans le répertoire suivant? \n $csv\_DirectoryLocation : [Oui] ou [Non]"  
read answer\_fg  
#Chargement du chemin d’acces au fichier CSV dans la variable “csv\_location”. Le fichier CSV doit s’appeler “import\_regie.csv” =\> Si non, fonctionne pas.  
case $answer\_fg in  
Oui|OUI|oui|O|o ) fichier\_groupe=$csv\_DirectoryLocation/fichier\_groupe.csv  
echo “Le fichier se trouve dans: $fichier\_groupe”;;  
Non|NON|non|N|n ) echo -n "Dans quel répertoire se trouve le fichier fichier\_groupe.csv?\n"  
read csv\_EntryLocation  
fichier\_groupe=$csv\_EntryLocation/fichier\_groupe.csv  
echo “Le fichier se trouve donc bien dans: $fichier\_groupe\n”;;  
\*) "Au revoir…\n"  
exit 1 ;;  
esac  
echo $csv\_DirectoryLocation  
nbr\_ligne\_groupe=`awk 'END {print NR}' $fichier_groupe)`  
groupe=`awk -F ";" -v num_ligne=$nbr_ligne_groupe 'NR == num_ligne { printf $NF }' $fichier_groupe`  
echo $groupe  
echo $csv\_DirectoryLocation  
fichier\_destination=$csv\_DirectoryLocation/$groupe & ".csv"  
echo $fichier\_destination  
touch $fichier\_destination[/code]

Bon je sais le code est horrible mais je fais ce que je peux avec le peu de connaissance que j’ai. Le code va évoluer car j’ai en fait besoin de créer autant de fichier que de ligne lu dans "fichier\_groupe.csv"  
je ferai ça avec une boucle while.  
Donc pour l’instant je veux juste régler mon problème de création de fichier sachant qu’en faisant comme ça, le fichier créer est un fichier dont le nom contient un retour chariot (retour à la ligne).  
Je veux que mon fichier soit du type: nom\_lu.csv

Merci pour votre aide.

Au fait, j’en profite pour demander si quelqu’un connait un bon bouquin pour apprendre le script shell?

---

<div class="post-metadata">

**Author:** ![M3t4linux](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/5daacb/32.png) [@M3t4linux](https://www.debian-fr.org/u/M3t4linux)\
**Post date:** [Février 21, 2016, 9:01 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/2 "2016-02-21T21:01:54Z")

</div>

je ne répondrai que pour la partie livres/tuto :

ftp://ftp-developpez.com/eric-sanchis/IntroProgBash.pdf

[blaess.fr/christophe/livres/ … x-et-unix/](http://www.blaess.fr/christophe/livres/scripts-shell-linux-et-unix/)

---

<div class="post-metadata">

**Author:** ![alpha](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/6a8cbe/32.png) [@alpha](https://www.debian-fr.org/u/alpha)\
**Post date:** [Février 21, 2016, 9:01 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/3 "2016-02-21T21:01:57Z")

</div>

`readarray -t array < nom_de_fichier.txt
len=${#array[@]};
for ((i=0; i<${len};i++));
do 
        mkdir ${array[$i]}
done
`

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 9:04 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/4 "2016-02-21T21:04:26Z")

</div>

salut,

> [@](#):
>
> j’ai en fait besoin de créer autant de fichier que de ligne lu dans «&nbsp;fichier\_groupe.csv&nbsp;»

dans ton code, seule la dernière ligne est lue :`nbr_ligne_groupe=`awk 'END {print NR}' $fichier_groupe)``

de plus, plus haut dans le script, si l’utilisateur répond «&nbsp;non&nbsp;», le nom de la variable fournie doit rester le même : csv\_DirectoryLocation

enfin, entre autres, `fichier\_destination=$csv\_DirectoryLocation/$groupe & «&nbsp;.csv&nbsp;»’ ceci n’est pas correct, et devrait afficher une erreur : les " & " sont de trop.

---

<div class="post-metadata">

**Author:** ![vandman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/50afbb/32.png) [@vandman](https://www.debian-fr.org/u/vandman)\
**Post date:** [Février 21, 2016, 9:05 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/5 "2016-02-21T21:05:43Z")

</div>

Bonjour,  
Je reviens un peu tardivement.

Je voudrai savoir ce qui cloche dans mon code???

[code]csv\_DirectoryLocation=$(pwd)

echo -n "Le fichier liste des groupes se trouve-t-il dans le répertoire suivant? \n $csv\_DirectoryLocation : [Oui] ou [Non]"  
read answer\_fg  
#Chargement du chemin d’acces au fichier CSV dans la variable “csv\_location”. Le fichier CSV doit s’appeler “fichier\_groupe.csv” =\> Si non, fonctionne pas.  
case $answer\_fg in  
Oui|OUI|oui|O|o ) fichier\_groupe=$csv\_DirectoryLocation/fichier\_groupe.csv  
echo “1. Le fichier se trouve dans: $fichier\_groupe”;;  
Non|NON|non|N|n ) echo -n "Dans quel répertoire se trouve le fichier fichier\_groupe.csv?\n"  
read csv\_EntryLocation  
fichier\_groupe=$csv\_EntryLocation/fichier\_groupe.csv  
echo “Le fichier se trouve donc bien dans: $fichier\_groupe\n”;;  
\*) "Au revoir…\n"  
exit 1 ;;  
esac  
echo "2. $csv\_DirectoryLocation"  
nbr\_ligne\_groupe=`awk 'END {print NR}' $fichier_groupe`  
echo "3. $nbr\_ligne\_groupe"  
groupe=`awk -F ";" -v num_ligne=$nbr_ligne_groupe 'NR == num_ligne { print $NF }' $fichier_groupe`  
echo "4. $groupe"  
echo “5. $csv\_DirectoryLocation"  
fichier\_destination=”$csv\_DirectoryLocation/$groupe.csv"  
echo $fichier\_destination  
touch $fichier\_destination[/code]

Voici le résultat une fois lancé.

[code]~/Documents$ ./tiers\_csv.sh  
Le fichier liste des groupes se trouve-t-il dans le répertoire suivant? \n /home/user/Documents : [Oui] ou [Non]o

1. Le fichier se trouve dans: /home/user/Documents/fichier\_groupe.csv
2. /home/user/Documents
3. 59
4. 2014\_utilisateurs\_89
5. /home/user/Documents  
.csve/user/Documents/2014\_utilisateurs\_89  
[/code]  
Ce qui m’intéresse dans la correction est la correction de la ligne apres le "5. /home/user/Documents"  
Je veux que cette ligne soit comme ca: “home/user/Documents/2014\_utilisateurs\_89.csv”

Quand je fait un ls -l, j’obtiens:

`:~/Documents$ ls -l
total 72540
-rw-r--r-- 1 user user 0 nov. 25 17:25 2014_utilisateurs_90?.csv
`  
Je ne sais pas pourquoi il y a un caractère spéciale entre le “90” et “.csv”???

Merci pour l’aide?

voici le fichier fichier\_groupe.csv:

`Code département;Nom du département;nombres utilisateurs;Liste des groupes
01;Ain;1 499;2014_utilisateurs_01
02;Aisne;1 455;2014_utilisateurs_02
03;Allier;777;2014_utilisateurs_03
04;Alpes-de-Haute-Provence;442;2014_utilisateurs_04
05;Hautes-Alpes;368;2014_utilisateurs_05
06;Alpes-Maritimes;1 181;2014_utilisateurs_06
07;Ardèche;821;2014_utilisateurs_07
08;Ardennes;894;2014_utilisateurs_08
09;Ariège;535;2014_utilisateurs_09
10;Aube;820;2014_utilisateurs_10
11;Aude;992;2014_utilisateurs_11
12;Aveyron;684;2014_utilisateurs_12
13;Bouches-du-Rhône;2 674;2014_utilisateurs_13
14;Calvados;1 737;2014_utilisateurs_14
15;Cantal;464;2014_utilisateurs_15
16;Charente;990;2014_utilisateurs_16
17;Charente-Maritime;1 555;2014_utilisateurs_17
18;Cher;769;2014_utilisateurs_18
19;Corrèze;628;2014_utilisateurs_19
2A;Corse-du-Sud;335;2014_utilisateurs_2A
2B;Haute-Corse;540;2014_utilisateurs_2B
21;Côte-d'Or;1 353;2014_utilisateurs_21
22;Côtes-d'Armor;1 422;2014_utilisateurs_22
23;Creuse;431;2014_utilisateurs_23
24;Dordogne;1 178;2014_utilisateurs_24
25;Doubs;1 400;2014_utilisateurs_25
26;Drôme;1 166;2014_utilisateurs_26
27;Eure;1 590;2014_utilisateurs_27
28;Eure-et-Loir;987;2014_utilisateurs_28
29;Finistère;1 830;2014_utilisateurs_29
30;Gard;1 593;2014_utilisateurs_30
31;Haute-Garonne;2 300;2014_utilisateurs_31
32;Gers;702;2014_utilisateurs_32
33;Gironde;2 428;2014_utilisateurs_33
34;Hérault;2 011;2014_utilisateurs_34
35;Ille-et-Vilaine;1 959;2014_utilisateurs_35
36;Indre;629;2014_utilisateurs_36
67;Bas-Rhin;2 259;2014_utilisateurs_67
68;Haut-Rhin;1 580;2014_utilisateurs_68
69;Rhône;2 667;2014_utilisateurs_69
70;Haute-Saône;861;2014_utilisateurs_70
71;Saône-et-Loire;1 488;2014_utilisateurs_71
72;Sarthe;1 358;2014_utilisateurs_72
73;Savoie;1 012;2014_utilisateurs_73
74;Haute-Savoie;1 480;2014_utilisateurs_74
76;Seine-Maritime;2 328;2014_utilisateurs_76
79;Deux-Sèvres;932;2014_utilisateurs_79
80;Somme;1 636;2014_utilisateurs_80
81;Tarn;842;2014_utilisateurs_81
82;Tarn-et-Garonne;490;2014_utilisateurs_82
83;Var;1 440;2014_utilisateurs_83
84;Vaucluse;685;2014_utilisateurs_84
85;Vendée;1 418;2014_utilisateurs_85
86;Vienne;1 095;2014_utilisateurs_86
87;Haute-Vienne;856;2014_utilisateurs_87
88;Vosges;1 151;2014_utilisateurs_88
89;Yonne;973;2014_utilisateurs_89
90;Territoire de Belfort;353;2014_utilisateurs_90`

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 9:05 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/6 "2016-02-21T21:05:44Z")

</div>

le fichier csv est importé de Windows ? alors il faut le passer par `fromdos'`cat -A tonFichier.csv’ nous dira ce qu’il y a en guise de fins de lignes.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 9:05 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/7 "2016-02-21T21:05:54Z")

</div>

[quote=«&nbsp;vandman&nbsp;»]…Ce qui m’intéresse dans la correction est la correction de la ligne apres le «&nbsp;5. /home/user/Documents&nbsp;»…[/quote]Essaie ces lignes de commandes dans un terminal :`csv_DirectoryLocation="/home/user/Documents"
echo $csv_DirectoryLocation``csv_DirectoryLocation="/home/user/Documents"
csv_DirectoryLocation=${csv_DirectoryLocation#/}
echo $csv_DirectoryLocation`

NOTE: S’il n’existe pas, il te faudra créer le répertoire contenant avant de pouvoir y créer des fichiers avec [mono]touch[/mono] (ou autre)

Par exemple, si le répertoire [mono]home/user/Documents[/mono] n’existe pas, la commande [mono]touch home/user/Documents/fichTest[/mono] retournera :

> [@](#):
>
> touch: impossible de faire un touch « home/user/Documents/fichTest »: Aucun fichier ou dossier de ce type

Il faudra d’abord créer le répertoire contenant : [mono]home/user/Documents/[/mono] avec la commande :`mkdir -p home/user/Documents/`

---

<div class="post-metadata">

**Author:** ![vandman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/50afbb/32.png) [@vandman](https://www.debian-fr.org/u/vandman)\
**Post date:** [Février 21, 2016, 9:06 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/8 "2016-02-21T21:06:08Z")

</div>

Bonsoir,

Je réponds rapidement à MicP.

Le problème n’est pas la création du répertoire, mais le fait que j’ai

```auto

```

au lieu de

```auto

```

Désolé, je n’ai pas été assez précis?

Cordialement  
vandman

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 9:06 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/9 "2016-02-21T21:06:08Z")

</div>

=======[quote]…Je ne sais pas pourquoi il y a un caractère spéciale entre le “90” et “.csv”???…[/quote]Histoire de savoir de quel code de caractère il s’agit, essaie de voir avec [mono]hexdump[/mono]

`michel@debG53SW:~$ sed -n '/^90/p' fichier_groupe.csv | hexdump -C
00000000 39 30 3b 54 65 72 72 69 74 6f 69 72 65 20 64 65 |90;Territoire de|
00000010 20 42 65 6c 66 6f 72 74 3b 33 35 33 3b 32 30 31 | Belfort;353;201|
00000020 34 5f 75 74 69 6c 69 73 61 74 65 75 72 73 5f 39 |4_utilisateurs_9|
00000030 30 0a |0.|
00000032
michel@debG53SW:~$ 
``michel@debG53SW:~$ ls -l 2014_utilisateurs_90* | hexdump -C
00000000 2d 72 77 2d 72 2d 2d 72 2d 2d 20 31 20 6d 69 63 |-rw-r--r-- 1 mic|
00000010 68 65 6c 20 6d 69 63 68 65 6c 20 30 20 6e 6f 76 |hel michel 0 nov|
00000020 2e 20 20 32 38 20 30 32 3a 31 36 20 32 30 31 34 |. 28 02:16 2014|
00000030 5f 75 74 69 6c 69 73 61 74 65 75 72 73 5f 39 30 |_utilisateurs_90|
00000040 2e 63 73 76 0a |.csv.|
00000045
michel@debG53SW:~$ 
`Si ça se trouve, c’est ce caractère qui met la pagaille dans le script, mais au cas où, remplace les lignes:`fichier_destination="$csv_DirectoryLocation/$groupe.csv"
echo $fichier_destination
touch $fichier_destination
`par`fichier_destination=${csv_DirectoryLocation}/${groupe}".csv"
echo "$fichier_destination"
touch "$fichier_destination"
`

=======

[quote=“vandman”]…Désolé, je n’ai pas été assez précis?…[/quote]Ça me rassure : je ne suis donc pas le seul… 🙂

=======  
J’ai enlevé une étoile en trop dans mon message précédent : [mono]${csv\_DirectoryLocation#/}[/mono] au lieu de [mono][strike]${csv\_DirectoryLocation#/\*}[/strike][/mono]

---

<div class="post-metadata">

**Author:** ![vandman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/50afbb/32.png) [@vandman](https://www.debian-fr.org/u/vandman)\
**Post date:** [Février 21, 2016, 9:06 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/10 "2016-02-21T21:06:16Z")

</div>

bonjour,

oui, le fichier est importé de Windows.

Voici les retours des codes suivants:

`cat -A fichier_groupe.csv
Code dM-CM-)partement;Nom du dM-CM-)partement;nombres utilisateurs;Liste des groupes^M$
01;Ain;1M-BM- 499;2014_utilisateurs_01^M$
02;Aisne;1M-BM- 455;2014_utilisateurs_02^M$
`  
et

`~/Documents$ sed -n '/^90/p' fichier_groupe.csv | hexdump -C
00000000 39 30 3b 54 65 72 72 69 74 6f 69 72 65 20 64 65 |90;Territoire de|
00000010 20 42 65 6c 66 6f 72 74 3b 33 35 33 3b 32 30 31 | Belfort;353;201|
00000020 34 5f 75 74 69 6c 69 73 61 74 65 75 72 73 5f 39 |4_utilisateurs_9|
00000030 30 0d 0a |0..|
00000033
`  
et

`~/Documents$ ls -l 2014_utilisateurs_90* | hexdump -C
00000000 2d 72 77 2d 72 2d 2d 72 2d 2d 20 31 20 70 69 65 |-rw-r--r-- 1 pie|
00000010 72 72 65 20 70 69 65 72 72 65 20 30 20 64 c3 a9 |rre pierre 0 d..|
00000020 63 2e 20 20 20 31 20 30 39 3a 30 39 20 32 30 31 |c. 1 09:09 201|
00000030 34 5f 75 74 69 6c 69 73 61 74 65 75 72 73 5f 39 |4_utilisateurs_9|
00000040 30 0d 2e 63 73 76 0a |0..csv.|
00000047
`

---

<div class="post-metadata">

**Author:** ![vandman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/50afbb/32.png) [@vandman](https://www.debian-fr.org/u/vandman)\
**Post date:** [Février 21, 2016, 9:06 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/11 "2016-02-21T21:06:16Z")

</div>

Bonjour,  
la modification suivante:

`fichier_destination=${csv_DirectoryLocation}/${groupe}".csv"
echo "$fichier_destination"
touch "$fichier_destination"`  
me retourne l’erreur suivante:

[code]~/Documents$ ./tiers\_csv.shLe fichier liste des groupes se trouve-t-il dans le répertoire suivant? \n /home/pierre/Documents : [Oui] ou [Non]o

1. Le fichier se trouve dans: /home/pierre/Documents/fichier\_groupe.csv
2. /home/pierre/Documents
3. 59
4. 2014\_utilisateurs\_90
5. /home/pierre/Documents  
./tiers\_csv.sh: ligne22: ${$csv\_DirectoryLocation}/${groupe}".csv" : mauvaise substitution  
[/code]

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Février 21, 2016, 9:06 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/12 "2016-02-21T21:06:17Z")

</div>

[quote]oui, le fichier est importé de Windows.[/quote]alors `fromdos tonFichier.csv`!

---

<div class="post-metadata">

**Author:** ![vandman](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/v/50afbb/32.png) [@vandman](https://www.debian-fr.org/u/vandman)\
**Post date:** [Février 21, 2016, 9:06 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/13 "2016-02-21T21:06:17Z")

</div>

Bonjour,

La commande fromdos fonctionne bien, elle supprime bien les retours à la ligne Windows.

Merci

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 9:06 UTC](https://www.debian-fr.org/t/script-shell-correction-de-code/64137/14 "2016-02-21T21:06:27Z")

</div>

```auto
[code]awk '{sub(/\r$/,"");print}' dosfile.txt > unixfile.txt[/code]
[code]awk '{sub(/$/,"\r");print}' unixfile.txt > dosfile.txt[/code]
```

```auto

```

```auto

```
