#1 Le 09/04/2020, à 12:26
- tinos19
echo ne renvoie pas de caractères spéciaux [ RESOLU ]
Bonjour à tous et à toutes.
Alors voila, j'ai eu un TP en cours où le but était de construire un script bash pour afficher un menu avec différents choix qui exécuterait chacun une commande spécifique, à partir de mon répertoire courant. Pour se faire, j'ai voulu créer deux fonctions, une qui se nomme affiche et qui va servir à afficher le menu, et une autre qui s'appelle application et qui va appliquer la commande correspondante au choix et l'afficher.
[color=#6cf570]function[/color] affichage {
case $[color=#ff0000]1[/color] in
[color=#ff1717]1[/color])
echo [color=#ff1717]'afficher les informations de ...'[/color]
;;
[color=#ff1717]2[/color])
echo [color=#ff1717]'....'[/color]
...
[color=#ff1717]*[/color])
echo [color=#ff1717]'je ne sais pas'[/color]
;;
esac
}
Dans mon code je l'utilise de cette manière avec une boucle while qui va afficher tous les cas, du premier au onzième. Ensuite je demande le choix de l'utilisateur et enfin j'appelle la fonction application, et c'est là que ça va pas.
i=1
echo -e '==========MENU==========\n'
while [ $i != 12 ]
do
echo -e 'Pour '$(affiche $i) ': tapez '$i'\n'
i=$(($i+1))
done
echo 'Entrez votre choix : '
read choix
echo -e 'Vous avez choisi : '$(affiche $choix)'\n'
echo $(application $choix)
voila ma fonction application, pour l'instant je n'ai rempli que le cas 1 car c'est là que ça ne marche pas.
function application {
case $1 in
1)
nombre_de_fichiers=$(ls -l | grep "^-" -c)
for (( i=1 ; i<=$nombre_de_fichiers ; i++ ))
do
echo -e $(ls -l -lt | grep "^-" | grep "" -n | grep ^$i) '\n'
done
;;
2)
echo 'bouger un fichier'
;;
...
Là ce que j'essaie de faire c'est afficher tous les fichiers triés par date. Le problème c'est que j'ai fait une boucle for pour pouvoir afficher ligne par ligne.
Ce que je voudrait obtenir:
-rw-r--r-- 1 pichnet19 pichnet19 1865 avril 9 13:10 Menu_Obsrv
-rw-r--r-- 1 pichnet19 pichnet19 60904 avril 9 13:01 Capture du 2020-04-09 13-01-11.png
-rw-r--r-- 1 pichnet19 pichnet19 66381 avril 9 12:45 Capture du 2020-04-09 12-45-25.png
-rw-r--r-- 1 pichnet19 pichnet19 35096 avril 9 12:03 Capture du 2020-04-09 12-03-57.png
-rw-r--r-- 1 pichnet19 pichnet19 69545 avril 9 12:03 Capture du 2020-04-09 12-03-30.png
-rw-r--r-- 1 pichnet19 pichnet19 65550 avril 9 11:57 Capture du 2020-04-09 11-57-14.png
-rw-r--r-- 1 pichnet19 pichnet19 29576 avril 9 11:50 Capture du 2020-04-09 11-50-08.png
-rw-r--r-- 1 pichnet19 pichnet19 66959 avril 9 11:49 Capture du 2020-04-09 11-49-36.png
-rw-rw-r-- 1 pichnet19 pichnet19 173295 avril 9 10:55 G3_et_G4_TP4_9_AVRIL.pdf
Ce que j'obtiens:
1:-rw-r--r-- 1 pichnet19 pichnet19 1865 avril 9 13:10 Menu_Obsrv 2:-rw-r--r-- 1 pichnet19 pichnet19 60904 avril 9 13:01 Capture du 2020-04-09 13-01-11.png 3:-rw-r--r-- 1 pichnet19 pichnet19 66381 avril 9 12:45 Capture du 2020-04-09 12-45-25.png 4:-rw-r--r-- 1 pichnet19 pichnet19 35096 avril 9 12:03 Capture du 2020-04-09 12-03-57.png 5:-rw-r--r-- 1 pichnet19 pichnet19 69545 avril 9 12:03 Capture du 2020-04-09 12-03-30.png 6:-rw-r--r-- 1 pichnet19 pichnet19 65550 avril 9 11:57 Capture du 2020-04-09 11-57-14.png 7:-rw-r--r-- 1 pichnet19 pichnet19 29576 avril 9 11:50 Capture du 2020-04-09 11-50-08.png 8:-rw-r--r-- 1 pichnet19 pichnet19 66959 avril 9 11:49 Capture du 2020-04-09 11-49-36.png 9:-rw-rw-r-- 1 pichnet19 pichnet19 173295 avril 9 10:55 G3_et_G4_TP4_9_AVRIL.pdf
Et là je ne comprends pas parce que j'ai quand même mis le '\n' à la fin de chaque echo et l'option -e. Je ne sais pas pourquoi l'echo ne me renvoie pas de retour à la ligne en clair. J'ai essayé de remplacer '\n' par 'YO' et le 'YO' ressort à la fin donc je pense que le problème se situe avec le caractère spécial '\n'
Merci d'avance à ceux qui liront et qui pourront peut-être m'aider
Dernière modification par tinos19 (Le 12/04/2020, à 17:22)
#2 Le 09/04/2020, à 13:41
- pingouinux
Re : echo ne renvoie pas de caractères spéciaux [ RESOLU ]
Bonjour,
Essaye de remplacer
echo $(application $choix)
par
application $choix
Ajouté :
Tu aurais pu faire aussi
echo "$(application $choix)"
Dernière modification par pingouinux (Le 09/04/2020, à 13:52)
Hors ligne
#3 Le 09/04/2020, à 13:57
- diesel
Re : echo ne renvoie pas de caractères spéciaux [ RESOLU ]
Et la commande "select", elle marchait pô ?
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
En ligne
#4 Le 09/04/2020, à 14:29
- kamaris
Re : echo ne renvoie pas de caractères spéciaux [ RESOLU ]
Pas besoin de rajouter des echo à quelque chose qui affiche déjà sa sortie dans le terminal, en gérant très bien tout seul les passages à la ligne
Comme dit pingouinux, tu peux (dois) mettre simplement
application $choix
mais tu dois aussi enlever le echo dans application().
PS : plutôt que bricoler à la main une coloration syntaxique (qui manque effectivement), utilise les balises code pour mettre en forme ton message (« <> » dans la barre d'outils de composition du message).
Dernière modification par kamaris (Le 09/04/2020, à 14:38)
Hors ligne
#5 Le 09/04/2020, à 15:33
- MicP
Re : echo ne renvoie pas de caractères spéciaux [ RESOLU ]
Bonjour
Tu pourrais remplacer l'extrait suivant :
1)
nombre_de_fichiers=$(ls -l | grep "^-" -c)
for (( i=1 ; i<=$nombre_de_fichiers ; i++ ))
do
echo -e $(ls -l -lt | grep "^-" | grep "" -n | grep ^$i) '\n'
done
;;
2)
par ce qui suit :
1)
for f in *; do
if test -f "$f"; then
ls -l "$f"
fi
done
;;
2)
L'option -f de la fonction test du bash
permet de tester s'il s'agit bien d'un fichier normal.
=======
EDIT : Fatigué, j'avais écrit : ls -lt "$f"
D'où le message de Watael
Dernière modification par MicP (Le 10/04/2020, à 09:55)
Hors ligne
#6 Le 09/04/2020, à 19:52
- Watael
Re : echo ne renvoie pas de caractères spéciaux [ RESOLU ]
mais, comment trier UN fichier ?...
si vous voulez afficher certaines informations d'un fichier (au sens large), utilisez stat, dont la sortie est "formatable" à souhait.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 10/04/2020, à 09:53
- MicP
Re : echo ne renvoie pas de caractères spéciaux [ RESOLU ]
Ouahhh ! je devais vraiment être fatigué, je n'avais pas compris ton message,
effectivement, "comment trier une liste de UN seul fichier" :lol::lol:
Merci Watael
Dernière modification par MicP (Le 05/05/2020, à 13:29)
Hors ligne
#8 Le 12/04/2020, à 17:27
- tinos19
Re : echo ne renvoie pas de caractères spéciaux [ RESOLU ]
Merci pour vos réponses, c'est bon en enlevant le echo et en laissant la fonction ça me fait ce que je voulais c'est impeccable merci !