Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

Hors 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 smile
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::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 !