Pages : 1
#1 Le 08/05/2020, à 17:35
- joe217
[résolu] commande printf
Bonjour,
j'aimerais afficher uniquement les fichiers de mon répertoire courant ;
#!/bin/zsh
for filename in "$(ls)"
if [[ -f filename ]] ; then
cat $filename | while read ligne ; do;
printf "Les fichiers présents dans le répertoire courant sont%s" "$ligne"
fi
done
je ne comprends pas pourquoi il m'affiche 1 pare error near \n?
merci
Dernière modification par joe217 (Le 09/05/2020, à 18:06)
Hors ligne
#2 Le 08/05/2020, à 18:52
- Watael
Re : [résolu] commande printf
salut,
for filename in "$(ls)" Non.
for filename in *
if [[ -f filename ]] ; then Non. tu n'utlises pas les fonctionnalités avancées des crochets doubles, donc utilise plutôt un test simple.
et il faut développer la variable
if test -f "$filename"
cat $filename Non. on n'utilise pas cat dans ce cas, on redirige le contenu du fichier vers la sortie standard pour read
while read line; do :...; done <"$filename"
et il faut ajouter un retour chariot au fromat passé à printf.
ET, il faut toujours mettre les Développements de paramètres entre guillemets.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 08/05/2020, à 22:25
- joe217
Re : [résolu] commande printf
merci j'ai corrigé mais j'ai toujours des erreurs:parse error near fi
#!/bin/zsh
for filename in *
if test -f "$filename"
while read ligne ; do;
printf "Les fichiers présents dans le répertoire courant sont%s" "$ligne"
fi
done <"$filename"
pour printf je veux juste qu'il me liste sous cette forme;
Les fichiers présents dans le répertoire courant sont
fichier1.txt
fichier2.txt
...
Dernière modification par joe217 (Le 08/05/2020, à 22:26)
Hors ligne
#4 Le 09/05/2020, à 07:11
- Watael
Re : [résolu] commande printf
j'ai toujours des erreurs:parse error near fi
il manque le then.
$ help if if: if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi
et le fi doit être après le done du while
il y a d'ailleurs un point-virgule de trop après do
et il manque le done du for.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 09/05/2020, à 14:50
- joe217
Re : [résolu] commande printf
merci mais j'ai toujours des erreurs
#!/bin/zsh
for filename in *
if test -f "$filename" ; then
while read ligne ; do;
echo -n $ligne
fi
done < "$filename"
j'ai toujours un parse error near fi et la syntaxe est correcte; il doit avoir un ; apres le do..
comment on fais avec le printf pour afficher chaque nom a la ligne ;
je sais que c'est printf "$ligne " mais pour afficher avant de lister les fichiers ; il faut faire ;
printf "Les fichiers présents dans le répertoire courant sont%s" "$ligne"
?
merci
Hors ligne
#6 Le 09/05/2020, à 14:54
- Watael
Re : [résolu] commande printf
si tu ne corriges pas les erreurs que je t'ai indiquées...
Dernière modification par Watael (Le 09/05/2020, à 15:19)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 09/05/2020, à 15:04
- joe217
Re : [résolu] commande printf
J'ai mis le fi aprés le done et j'ai toujours l'erreur
et j'ai pas besoin de rajouter un 2e done pour le for
et dans mon cours ; Pour tester si un fichier est ordinaire, on utilise [[ -f nom_du_fichier ]]
donc je peux utiliser ça
Dernière modification par joe217 (Le 09/05/2020, à 15:10)
Hors ligne
#8 Le 09/05/2020, à 15:23
- Watael
Re : [résolu] commande printf
[[ est inutile si tu n'en utilises pas les fonctionnalités avancées, mais -f est la bonne option.
pour les erreurs :
il y a toujours un point-virgule en trop après do
il manque toujours le done du for
[edit :
et j'ai pas besoin de rajouter un 2e done pour le for
ah bon. et pourquoi ?
Dernière modification par Watael (Le 09/05/2020, à 15:24)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 09/05/2020, à 15:41
- joe217
Re : [résolu] commande printf
ça marche toujours pas :parse error near fi
#!/bin/zsh
for filename in *
if test -f "$filename" ; then
while read ligne ; do
echo -n $ligne
fi
done < "$filename"
done
Hors ligne
#10 Le 09/05/2020, à 15:51
- Watael
Re : [résolu] commande printf
le fi est toujours avant le premier done, alors qu'il doit être après.
si tu indentais ton code tu le verrais.
ah ! et il manque un do pour le for.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 09/05/2020, à 16:06
- joe217
Re : [résolu] commande printf
ça marche toujours pas ?
#!/bin/zsh
for filename in *; do
if test -f "$filename" ; then
while read ligne ; do
echo -n $ligne
done
fi
done < "$filename"
Hors ligne
#12 Le 09/05/2020, à 16:09
- Watael
Re : [résolu] commande printf
c'est le read dans la boucle while qui doit lire le fichier.
en gros, c'est la boucle while qui doit lire le fichier pas la boucle for
Dernière modification par Watael (Le 09/05/2020, à 16:10)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 09/05/2020, à 17:32
- joe217
Re : [résolu] commande printf
j'ai pas compris j'ai fais ça et çca marche:
#!/bin/zsh
for filename in *
do
if [[ -f $filename ]]
then
echo "$filename"
fi
done
mais je veux que ma premiere ligne soit les fichiers du repertoire courant sont
j'ai fais ça avec printf:
printf "les fichiers du repertoire courant sont%s" "$filename"
mais ça m'affiche cette phrase avant chaque fichier et non qu'une seule fois au début ???
merci
Hors ligne
#14 Le 09/05/2020, à 17:37
- Watael
Re : [résolu] commande printf
il ne faut pas mettre le printf dans la boucle.
d'ailleurs, alors, puisque printf ne formate aucunes données, il est inutile - utilise simplement echo; mais avant la boucle.
Dernière modification par Watael (Le 09/05/2020, à 17:38)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#15 Le 09/05/2020, à 17:42
- joe217
Re : [résolu] commande printf
ça ne marche pas avec le echo
echo "les fichiers du repertoire courant sont%s" "$filename"
et je peux pas mettre le printf apres la boucle sinon la boucle est vide ??
aussi je dois utiliser printf
Dernière modification par joe217 (Le 09/05/2020, à 17:43)
Hors ligne
#16 Le 09/05/2020, à 17:47
- Watael
Re : [résolu] commande printf
je n'ai peut-être pas compris, mais tu veux
les fichiers du répertoire courant sont : #là, on n'est pas dans la boucle
fic1 # là on est entrés dans la boucle
fic2
ficN+1 # dernier fichier - là on sort de la boucle
donc tu veux simplement afficher une chaîne fixe : "les fichiers...sont".
il n'y a pas de formatage à appliquer, pas de données "dynamiques" : printf est inutile.
Dernière modification par Watael (Le 09/05/2020, à 17:48)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 09/05/2020, à 17:48
- joe217
Re : [résolu] commande printf
oui c'est exactement ça mais avec echo ça marche pas
echo "les fichiers du rep courant sont\n" "$filename"
avec ça j'ai
les fichier du rep
fic1
les fichier du rep
fic 2
Dernière modification par joe217 (Le 09/05/2020, à 17:50)
Hors ligne
#18 Le 09/05/2020, à 17:50
- Watael
Re : [résolu] commande printf
parce que echo n'utilise pas de format (%s)
montre-nous ton script actuel, et son résultat dans le terminal
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#19 Le 09/05/2020, à 17:53
- joe217
Re : [résolu] commande printf
!/bin/zsh
for filename in *
do
if [[ -f $filename ]]
then
echo "les fichiers du rep courant sont\n" "$filename"
fi
done
résultat
les fichiers du rep courant sont
fic1
les fichiers du rep courant sont
fic2
les fichiers du rep courant sont
fic3
Hors ligne
#20 Le 09/05/2020, à 17:58
- Watael
Re : [résolu] commande printf
il faut un echo avant la boucle, et un autre echo dans la boucle
echo 'les fichiers du répertoire courant sont :'
for f in *
do
test -f "$f" && echo "$f"
done
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#21 Le 09/05/2020, à 18:05
- joe217
Re : [résolu] commande printf
merci bcp
Hors ligne