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.

#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

nany a écrit :
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 wink

Et la piqûre de rappel qui peut toujours servir :

https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#The-Shopt-Builtin a écrit :

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


«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. big_smile

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

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 ..? big_smile


«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

lynn a écrit :

Mais qui a ce fichier

www.speedtest.net

dans ce répertoire ..? big_smile

"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

Watael a écrit :

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 big_smile

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

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