[gull] Truc et astuces: bash: manipulation de chaînes sans boucle for
Félix Hauri
felix at f-hauri.ch
Thu Aug 7 13:06:49 CEST 2025
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 - <felix at f-hauri.ch> - http://www.f-hauri.ch
More information about the gull
mailing list