#26 Le 28/01/2024, à 17:08
- jplemoine
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
En fait, c'est surtout pour faire en sorte que le nom ne change pas d'un démarrage à l'autre (c'était le cas des ethX et wlanY).
Par exemple,sur mon desktop (2 interface filaire), j'ai enp37s0 et enp38s0 : cela dépend de la position de la carte dans l'ordinateur.
Par contre, sur le portable, j'ai un enx + adresse mac --> C'est le dock branché en usb-c
Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#27 Le 28/01/2024, à 17:19
- bruno
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
bruno a écrit :for … w[l,w]*; do … done
Ne voulais-tu pas mettre des accolades plutôt que des crochets ?
Non, j'ai commis une erreur mais pas celle là. C'est la virgule qui est en trop ! Merci @ Watael :
$ ls -d /sys/class/net/w{w,l}*
ls: impossible d'accéder à '/sys/class/net/ww*': Aucun fichier ou dossier de ce type
/sys/class/net/wlxc4e9841bade5
⇒ évidemment, cela ne va pas on a une erreur car aucun fichier ne commence par ww
$ ls -d /sys/class/net/w[wl]*
/sys/class/net/wlxc4e9841bade55
⇒ me semble ok.
#28 Le 28/01/2024, à 17:24
- Watael
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
en bash, tu peux faire précéder la commande qui utilise les accolades de la ligne suivante : shopt -s nullglob.
Dernière modification par Watael (Le 28/01/2024, à 17:33)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#29 Le 28/01/2024, à 17:27
- bruno
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
Arf, je n'y pense jamais et c'est effectivement désactivé par défaut. Merci encore
Et la piqûre de rappel qui peut toujours servir :
nullglob
If set, Bash allows filename patterns which match no files to expand to a null string, rather than themselves.
Dernière modification par bruno (Le 28/01/2024, à 17:31)
#30 Le 28/01/2024, à 17:34
- Watael
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
les crochets sont POSIX, et font partie de la recherche de motifs dans le Développement des chemins. Ça expliquerait peut-être qu'ils n'affichent pas les motifs qui ne correspondent pas.
les accolades sont un "bashism". Le contenu est développé systématiquement. d'où le recours nécessaire à nullglob.
Dernière modification par Watael (Le 28/01/2024, à 17:35)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#31 Le 28/01/2024, à 18:32
- lynn
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
Par contre, si il n'y a aucun module wifi, sans l'option nullglob, j'obtiens ça :
[lynn@pc1] [~] $: for interface in /sys/class/net/w[lw]*; do interface=${interface##*/}; printf "%s\n" $interface; done
w[lw]*
[lynn@pc1] [~] $:
La variable $interface se charge avec une mauvaise valeur alors qu'avec nullglob, la variable n'existera pas. Pour continuer ou non un script, ça peut être utile.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#32 Le 28/01/2024, à 18:41
- geole
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
a@a:~$ ls -d /sys/class/net/w[wl]*
/sys/class/net/wlx0002728d7f31
a@a:~$ for interface in /sys/class/net/w[lw]*; do interface=${interface##*/}; printf "%s\n" $interface; done
wlx0002728d7f31
a@a:~$
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
#33 Le 28/01/2024, à 20:04
- Watael
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
gare aux guillemets !
$ for interface in /sys/class/net/w[lw]*; do interface=${interface##*/}; printf '%s\n' $interface; done
www.speedtest.net
$
parce que, dans le répertoire d'exécution, il y a ce fichier.
avec des guillemets :
$ for interface in /sys/class/net/w[lw]*; do interface=${interface##*/}; printf '%s\n' "$interface"; done
w[lw]*
$
mais
$ shopt -s nullglob
$ for interface in /sys/class/net/w[lw]*; do interface=${interface##*/}; printf '%s\n' "$interface"; done
$
avec ou sans guillemets, d'ailleurs.
Dernière modification par Watael (Le 28/01/2024, à 20:04)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#34 Le 28/01/2024, à 20:20
- lynn
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
Mais qui a ce fichier
www.speedtest.net
dans ce répertoire ..?
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#35 Le 28/01/2024, à 20:37
- Astrolivier
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
au fait, pourquoi le [lw] dans /sys/class/net/w[lw]* ?
il y a des interfaces non wifi qui commencent par "w" ?
S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)
Hors ligne
#36 Le 28/01/2024, à 20:44
- Watael
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
Mais qui a ce fichier
www.speedtest.net
dans ce répertoire ..?
"ce répertoire", dans lequel s'exécute cette ligne de commandes, c'est mon $HOME.
printf affiche le développement de w[lw]*, puisque c'est ce que contient $interface.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#37 Le 28/01/2024, à 21:25
- lynn
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
printf affiche le développement de w[lw]*, puisque c'est ce que contient $interface.
Ok, d'où l'intérêt de nullglob.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#38 Le 29/01/2024, à 18:25
- Astrolivier
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
du coup j'ai mis ça dans mon script et a priori c'est ok
if [[ ${short_or_long_output} -eq 1 ]]; then
shopt -s nullglob
for interface in /sys/class/net/w[lw]*; do
interface=${interface##*/}
iw_function
done
fi
S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)
Hors ligne
#39 Le 29/01/2024, à 18:47
- Watael
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
'servent à rien les accolades !
le nullglob, tu peux te le mettre au début du script, ce n'est jamais inutile.
#!/bin/bash
shopt -s nullglob #extglob globstar
#declare -i short_or_long_output
# en fait, il faut décider, c'est short OU long
declare -i longOutput=1
#...
if (( $longOutput )) #valeur différente de 0, on exécute.
then
for interface in /sys/class/net/w[lw]*; do
interface=${interface##*/}
iw_function
done
fi
Dernière modification par Watael (Le 29/01/2024, à 18:49)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#40 Le 29/01/2024, à 19:05
- lynn
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
Fonctionne aussi sans le symbole $
if (( longOutput ))
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#41 Le 29/01/2024, à 19:47
- Astrolivier
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
merci !
c'est mon tout premier script, donc je lis la doc, apprends plein de truc, et m'amuse bien. je vous montrerai le tout très bientôt, finalement j'ai un peu complexifié le truc. et je suis en plein dedans donc ça bouge, je rajoute de partout
# Set as enum if wificheck prints the short output without iw commands
# or the long output with iw commands
# this mainly because iw is not installed by default, and is quite long as it adds 300 lines minimum.
# short = 0 ; long = 1
declare -i short_or_long_output
short_or_long_output=0
j'avais lu dans les bonne pratique que le ${ } ne fait jamais de mal, bien au contraire, et comme je suis pas sûr du comportement des autres syntaxes, je risque de laisser comme ça
après c'est que j'ai une autre variable qui précède donc j'ai fait pareil pour la suivante, je me suis dit que je risquais pas grand chose
# Set language as enum : french = 0 ; english = 1 ; chinese =2 . Default if french.
declare -i language
language=0
je me sers de ça pour un switch case getopts
################ main ############################
while getopts ":hslec" arg; do
case $arg in
l)
short_or_long_output=1
;;
s)
short_or_long_output=0
;;
e)
language=1
;;
c)
language=2
;;
h)
help
;;
\?)
echo "Invalid option: -$OPTARG"
help
;;
:)
echo "Option -$OPTARG requires an argument."
help
;;
esac
done
S'il faut absolument faire des sacrifices pour assurer le progrès de l'humanité, ne serait-il pas indispensable de s'en tenir au principe selon lequel c'est à ceux dont on exige le sacrifice que la décision doit revenir en dernier ressort ? (howard zinn)
Hors ligne
#42 Le 29/01/2024, à 20:26
- Watael
Re : [Résolu]Mettre plusieurs occurence de grep dans une variable
j'avais lu dans les bonne pratique que le ${ }
ce n'est pas une bonne pratique.
c'est utilisé pour diverses raisons (concaténation, remplacement de paramètres, tableaux...), en dehors de ça, ça ne sert à rien.
ceinture ET bretelles, ça ne nuit pas, mais c'est inutile.
while getopts ":hslec" arg; do
case $arg in
l)
longOutput=1 #longOutput = 1 -> vrai
;;
s)
longOutput=0 #longOutput = 0 -> faux
un nom de variable doit être évocateur de ce qu'elle contient, et ne pas être ambigu.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne