From felix at f-hauri.ch Thu Aug 7 13:06:49 2025 From: felix at f-hauri.ch (=?utf-8?B?RsOpbGl4?= Hauri) Date: Thu, 7 Aug 2025 13:06:49 +0200 Subject: [gull] =?utf-8?q?Truc_et_astuces=3A_bash=3A_manipulation_de_cha?= =?utf-8?q?=C3=AEnes_sans_boucle_for?= Message-ID: S'il est réputé que bash n'est pas rapide, en évitant/réduisant au maximum les boucles (while, for, until, ...) et les forks, on obtient des résultats intéressant (voire brbash, plus bas). Essayez: - https://f-hauri.ch/vrac/manyPing.sh.txt How to collect many ping's outputs into bash variables A lancer avec des nom d'hôtes en argument. Voire en particulier les fonctions `out2var` et `printOut`. Lancé avec le switch "-d" permet de voire - ce que la commande `sed` produit, - la chaine temporaire utilisée pour la variable "${listArps[@]}" et - un dump des 6 variables finales. - https://f-hauri.ch/vrac/procNetstat.bash.txt bash script to pretty show /proc/net/netstat values Pour afficher le contenu de /proc/net/netstat de manière lisible Petit et rapide, élimine toutes les valeurs nulles et afficher les noms et valeurs par lignes, alignées sur les largeurs max. - https://f-hauri.ch/vrac/scanPingLocalnet.sh.txt Scan local net conf, ping whole local net, then run `host` D'abord, `ip r g 1.1.1.1` indique le routeur par défaut, puis `ip a s` permet de retrouver la config (en particulier le mask de sous-réseau). De là, on mappe la rangée d'ip dans une chaine style: host 192.168.1.1 & host 192.168.1.2 & ... host 192.168.1.254 & qui est passée à un `sh` dont la sortie est transformée par `sed` en $var[192<<24|168<<16|1<<8|1]="gateway.localnet" $var[192<<24... C'est tout. On obtient une variable indexée par les valeur entière des IP (atoi), contenant les noms, sinon les IPs de toutes les machines du réseau local qui ont répondu au ping. De là, les fonctions présentes dans manyPing.sh peuvent être utilisées pour la mise en forme. - https://f-hauri.ch/vrac/brbash.sh.txt Interactive simulation of a 64px heigth prompter, w/Utf8 braille font Simulation d'un affichage 64 pixels, avec une ligne qui déroule un message et une seconde ligne affichant date et heure (/1000 sec) Avec: - Redimensionement automatique lorsque la fenêtre est redimensionnée - Ecoute d'un FD /proc/$pid/fd/10 dans lequel on peut envoyer un message - Lancé sous XTerm, envoie une commande d'exemple dans le clipboard - Attend les intéraction utilisateur via les touches: 'r' Rafraichir l'affichage 'f' Lance `fortune` pour le nouveau message 'n' Attend le nouveau message à entrer au clavier 'l' Affiche durant 15 secs, la charge CPU du process, en pourcents 'q' Quit. Ce script évite autant que raisonnable de faire des boucles. Les seules boucles sont de 4 opération pour les 4 lignes d'affichage par ligne de text et LA boucle principale qui cadence l'affichage. Voilà, ce sera tout pour aujourd'hui! Comme d'habitude, vos observation, commentaire et remarques sont les bienvenues! PS: J'ai repensé ma librairie "netfunc" https://f-hauri.ch/vrac/netfunc.bash.txt pour imaginer `ip2int`, `int2ip` et `checkIsIP` capable de traiter leurs arguments par "mappage" et éviter les boucles. Il faudra que je mette en forme et que je fasse des mises à jour... Si cela intéresse l'un de vous, n'hésitez pas à me demander, je peux présenter mes brouillons! -- Félix Hauri - - http://www.f-hauri.ch