#1 Le 28/11/2021, à 14:55
- PowaBanga
Bash condition && || semblent ne pas fonctionner
Salut à tous !
J'essaye actuellement de faire un script de manipulation de recherche, je lance donc une recherche sur toutes les lignes d'un fichier et je souhaite n'afficher que les lignes ayant des résultat (elles se terminent toute par ".wal), et se terminant uniquement par certains type d'extention (.wal, .png, .jpg, .tga).
for i in $(cat monfichier.txt)
do
e=$(find mondossier -iname "$(echo $i|sed 's/.wal//g;s/+//g' | awk -F/ '{print $NF}').*")
o=$(echo $i | awk -F. '{print $NF}')
p=$(echo -n $e | wc -c)
if [[ $p -gt 0 ]] && [[ $o = png ]] || [[ $o = jpg ]] || [[ $o = tga ]] || [[ $o = wal ]]
then
echo -e "\e[38;5;46m$i\e[38;5;15m"
echo "$e"
fi
done
le problème, c'est que quoi que je fasse, ça imprime tout !
Hors ligne
#2 Le 28/11/2021, à 15:21
- pingouinux
Re : Bash condition && || semblent ne pas fonctionner
Bonjour,
Ton script est trop compliqué. Le mieux serait de donner un petit exemple de fichier et le résultat que tu veux.
Pour commencer, il faut remplacer
for i in $(cat monfichier.txt)
do
..............................................
done
par
while read i
do
..............................................
done < monfichier.txt
Ajouté : Mais il n'est peut-être même pas nécessaire de faire cette boucle
Dernière modification par pingouinux (Le 28/11/2021, à 15:22)
Hors ligne
#3 Le 28/11/2021, à 15:45
- geole
Re : Bash condition && || semblent ne pas fonctionner
Bonjour
essayer
grep -E ".wal$|.png$|.jpg$|.tga" monfichier.txt
De la même façon, vous devez utiliser l'ancre $ à la fin d'un modèle pour indiquer que la correspondance ne sera valable que si elle se trouve à la fin d'une ligne.
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
"gedit admin:///etc/fstab" est proscrit, utilisez "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY xdg-open /etc/fstab" Voir https://doc.ubuntu-fr.org/gedit
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#4 Le 28/11/2021, à 15:46
- Watael
Re : Bash condition && || semblent ne pas fonctionner
if test $p -gt 0 && test "$o" = "png" -o "$o" = "jpg" -o "$o" = "tga" -o "$o" = "wal"
ou
if (( $p )) && [[ $o =~ (png|jpg|tga|wal)$ ]]
pingouinux a raison. Ton script est trop compliqué : il comporte trop de commandes externes, qui pourraient être remplacées par des Remplacements de paramètres pour la plupart
et pourquoi ne pas lancer la recherche en filtrant d'abord le fichier, comme l'indique Geole, ou en décomposant le test de ton script :
d'abord tester la fin des lignes
faire la recherche
puis tester le nombre de résultat (>0)
Dernière modification par Watael (Le 28/11/2021, à 15:50)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#5 Le 28/11/2021, à 15:48
- PowaBanga
Re : Bash condition && || semblent ne pas fonctionner
je pense que tu n'a pas bien compris ce que j'essayais d'expliquer, je ne cherche donc pas à imprimer le résultat dans un fichier, je veux juste afficher la réponse dans mon terminal de façon structurée.
Je reconnais toutefois avoir simplifié mon script pour concentrer l’intérêt du lecteur sur ce qui ne fonctionne pas dans mon script.
Si tu veux pouvoir mieux comprendre ce que j'essaye de faire :
il y donc dans ce dossier tout un tas de fichiers texte, dont j'extrais l'information qui m'intéresse dans le fichier "no_such_file_or_directory.txt" (=monfichier.txt)
Pour chaque ligne de ce fichier, je lance une recherche plus globale dans le dossier Textures, pour voir si je la trouve ailleur
S'il en existe un, et qu'il est bien au format .wal, .png, .jpg, ou .tga
alors j'affiche le résulta dans la console avec des couleurs, et en affichant dans quel fichier texte celui qui est recherché à été trouvé
ce qui au final ma résulté sur ce script :
#!/bin/bash
grep -hr ".wal: No such" dday/condumps | sed 's/open_file_read: //g; s/open_from_disk: .\/dday\///g' | sort | uniq > dday/condumps/no_such_file_or_directory.txt
for i in $(cat dday/condumps/no_such_file_or_directory.txt | sed 's/: No such.*//g')
do
e=$(find dday/textures -iname "$(echo $i|sed 's/.wal//g;s/+//g' | awk -F/ '{print $NF}').*" | sed 's/dday\///g')
o=$(echo $i | awk -F. '{print $NF}')
p=$(echo -n $e | wc -c)
if [[ $p -gt 0 ]] && [[ $o = png ]] || [[ $o = jpg ]] || [[ $o = tga ]] || [[ $o = wal ]]
then
echo -e "\e[38;5;46m$i\e[38;5;15m"
echo "$e"
echo -e "\e[38;5;226m$(grep -r -l $i dday/condumps| sed 's/.txt.*//g;s/dday\/condumps\///g;/^no_such/d' | sort | uniq | tr '\n' ' ' ; echo)\e[38;5;15m"
else
true
fi
done
Ce qui me pose problème ici, c'est donc surtout que cette partie là du script ne fonctionne pas dans mon bash
if [[ $p -gt 0 ]] && [[ $o = png ]] || [[ $o = jpg ]] || [[ $o = tga ]] || [[ $o = wal ]]
then
echo -e "\e[38;5;46m$i\e[38;5;15m"
echo "$e"
echo -e "\e[38;5;226m$(grep -r -l $i dday/condumps| sed 's/.txt.*//g;s/dday\/condumps\///g;/^no_such/d' | sort | uniq | tr '\n' ' ' ; echo)\e[38;5;15m"
else
true
fi
[Édit]
houuu Merci infiniment Watael !!! j'ai donc opté pour ceci !!!
if (( $p )) && [[ $o =~ (png|jpg|tga|wal)$ ]]
Dernière modification par PowaBanga (Le 28/11/2021, à 15:50)
Hors ligne
#6 Le 28/11/2021, à 20:41
- kamaris
Re : Bash condition && || semblent ne pas fonctionner
Sinon en mode POSIX il te manquait un groupement de commandes :
if [[ $p -gt 0 ]] && { [[ $o = png ]] || [[ $o = jpg ]] || [[ $o = tga ]] || [[ $o = wal ]]; }
Dernière modification par kamaris (Le 28/11/2021, à 20:42)
Hors ligne
#7 Le 28/11/2021, à 21:51
- Watael
Re : Bash condition && || semblent ne pas fonctionner
mais, [[ n'est pas POSIX.
une version POSIX est la première version que j'ai donnée.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 28/11/2021, à 22:33
- kamaris
Re : Bash condition && || semblent ne pas fonctionner
Oui tu as raison désolé, j'étais focalisé sur le manque de regroupement et je n'ai pas noté les [[, probablement d'autant plus qu'ils ne sont pas nécessaires :
if [ $p -gt 0 ] && { [ $o = png ] || [ $o = jpg ] || [ $o = tga ] || [ $o = wal ]; }
est bien POSIX, mais ta version l'est aussi bien sûr (je ne l'avais pas vue en première lecture en fait).
Hors ligne
#9 Le 28/11/2021, à 22:35
- PowaBanga
Re : Bash condition && || semblent ne pas fonctionner
Merci pour vos réponses en tout cas, c'est super instructif !
Hors ligne