Debian Debian-France Debian-Facile Debian-fr.org Debian-fr.xyz Debian ? Communautés

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 02-04-2022 22:17:11

doli8888
Adhérent(e)
Lieu : 07110 VINEZAC
Distrib. : Debian Bullseye
Noyau : Linux 5.10.0-11-amd64
(G)UI : kwin
Inscription : 09-07-2019
Site Web

[RESOLU] erreur de syntaxe : fin de fichier prématurée

Bonjour,

Oui ce sujet a déjà été traité mais je n'ai pas trouvé mon bonheur dans la réponse
Chose simple , j'ai cette erreur

./build.sh: ligne 13: erreur de syntaxe : fin de fichier prématurée

et je n'arrive pas à m'en sortir avec, je tourne en rond pour quelque-chose qui doit se trouver sous mon nez
voici mon fichier build.sh qui me sers à compiler mon main.c

#!/bin/bash
echo "Compilation... ======================================================="
if [ -e $prog1 ]
then
    echo "Mon fichier existe"
    rm $prog1
else
    echo "Mon fichier n'existe pas"
fi
gcc main.c -Wall -o prog1
echo "Fin de compilation... ================================================"
./prog1


Lorsque je compile directement en terminal avec cette même ligne

gcc main.c -Wall -o prog1

cela fonctionne très bien, donc mon erreur se trouve dans la condition..

Une idée ?

Dernière modification par doli8888 (03-04-2022 13:08:14)


Debian GNU/Linux 11  64-bit     Noyau : 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux                 
KDE Plasma 5.20.5                    Processeurs : 12 × AMD Ryzen 5 5600G with Radeon Graphics   
KDE Frameworks : 5.78.0          Mémoire : 16 Gio de mémoire vive       
Qt : 5.15.2

Hors ligne

#2 02-04-2022 22:31:49

raleur
Membre
Inscription : 03-10-2014

Re : [RESOLU] erreur de syntaxe : fin de fichier prématurée

Pourquoi y a-t-il tantôt "$prog1" et tantôt "prog1" ?

Il vaut mieux montrer que raconter.

Hors ligne

#3 02-04-2022 22:54:59

doli8888
Adhérent(e)
Lieu : 07110 VINEZAC
Distrib. : Debian Bullseye
Noyau : Linux 5.10.0-11-amd64
(G)UI : kwin
Inscription : 09-07-2019
Site Web

Re : [RESOLU] erreur de syntaxe : fin de fichier prématurée

Si je ne me trompe pas $prog1 est une variable et prog1 un fichier exécutable

j'ai essayé en enlevant tous les $ => cela ne change rien au résultat toujours la même erreur

J'ai renommé le fichier build.sh en build1.sh et  il n'y a plus d'erreur ????
J'ai re renommé en build.sh et toujours plus d'erreur

Un ghost dans mon clavier peut être !!!!! ?????

Bon en tout cas c'est ok

Dernière modification par doli8888 (03-04-2022 13:07:54)


Debian GNU/Linux 11  64-bit     Noyau : 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux                 
KDE Plasma 5.20.5                    Processeurs : 12 × AMD Ryzen 5 5600G with Radeon Graphics   
KDE Frameworks : 5.78.0          Mémoire : 16 Gio de mémoire vive       
Qt : 5.15.2

Hors ligne

#4 07-04-2022 15:41:08

choops
Membre
Distrib. : Debian sid
(G)UI : XFCE
Inscription : 07-05-2017

Re : [RESOLU] erreur de syntaxe : fin de fichier prématurée

doli8888 a écrit :

Si je ne me trompe pas $prog1 est une variable et prog1 un fichier exécutable


Bonjour

Au sens strict, c'est presque ça:
- "$prog1" est la valeur de la variable prog1
- "prog1", dans ton script, est le nom du fichier de sortie de ta commande gcc et sera donc bien un exécutable (binaire)
Utiliser le même nom pour ces 2 éléments dans un même script est source de confusion.

Ceci dit, ça n'a pas vraiment de sens dans ton script.
Ta variable prog1 n'est jamais définie. Tu testes donc l'existence d'un fichier/lien/dossier à nom vide ($prog1 correspond à '' tant que tu n'a pas attribué de valeur à la variable prog1).
Ce test sera toujours VRAI. Tu auras donc systématiquement le retour suivant pour ce test:

Mon fichier existe
rm: opérande manquant



Etant donné que tu as décidé de supprimer le fichier si il existe et que ton nom de fichier de sortie sera toujours un fichier "prog1", tu peux réduire ton script à :

#!/usr/bin/env bash

set -e

echo "Compilation... ======================================================="
rm -f prog1
gcc main.c -Wall -o prog1
echo "Fin de compilation... ================================================"

./prog1
 



Le "set -e" fera que ton script stoppera avant de tenter d'exécuter ./prog1 si la compilation échoue (en fait, il te fait faire une sortie si une erreur se présente en ignorant ce qui doit suivre)

"rm -f" supprime le fichier ciblé si il existe mais ne tombe pas en erreur en cas d'inexistence du fichier ciblé, contrairement à "rm".

Dernière modification par choops (07-04-2022 15:58:17)

Hors ligne

#5 07-04-2022 16:31:59

doli8888
Adhérent(e)
Lieu : 07110 VINEZAC
Distrib. : Debian Bullseye
Noyau : Linux 5.10.0-11-amd64
(G)UI : kwin
Inscription : 09-07-2019
Site Web

Re : [RESOLU] erreur de syntaxe : fin de fichier prématurée

Merci beaucoup choops, je vais tester cela !  Effectivement mon shell est très approximatif

Debian GNU/Linux 11  64-bit     Noyau : 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux                 
KDE Plasma 5.20.5                    Processeurs : 12 × AMD Ryzen 5 5600G with Radeon Graphics   
KDE Frameworks : 5.78.0          Mémoire : 16 Gio de mémoire vive       
Qt : 5.15.2

Hors ligne

Pied de page des forums