Tixlegeek's DevBlog Code, Gringo, Silicium

qrcode

-

Scripts bash, et goodies CLI
** Attention! ** Cet article n'est pas terminé, il sortira début 2023, je le met là pour ne pas l'oublier :D (désolé, vous n'êtes pas un voyageur du futur)

Salutations!

Aujourd'hui, je me suis dit que j'allais vous partager certains des scripts BASH que j'utilise, que ce soit pour rigoler ou pour améliorer un peu mon confort de technicien.

Pourcentage de la semaine écoulée

Eh oui, parfois le temps est long. Dans cette optique, on peu facilement savoir ou on en est, en calculant l'avancement de la semaine sous forme de pourcentage:

echo $(($(date +'%w')*100/7))"%"
Alors bien sûr, ça c'est la version rapide. Mais avec un peu plus d'huile de coude, on peut aussi l'afficher sous forme de barre de progression:
#!/bin/bash
WIDTH=20
PERCENT=$((($(date +'(%w-1)*24')+$(date +"%-H"))*100/168 ))
WPERCENT=$(($PERCENT*$WIDTH/100))
FULLCHAR="█"
EMPTYCHAR="░"
echo "Avancement de la semaine:"
echo -n "["
for i in $(seq 0 1 $WIDTH); do
	[[ $i -gt $WPERCENT ]] && echo -n $EMPTYCHAR || echo -n  $FULLCHAR
done
tput sc
echo -ne "\033["$(( ( $WIDTH + ${#PERCENT} ) / 2 ))"D"$PERCENT"%"
tput rc
echo "]"

Ce qui donne quelquechose comme ça:

Avancement de la semaine:
[████████░░38%░░░░░░░░]

Ou si vous êtes sucrés vous pouvez aussi utiliser d'autres types de rendu:

  • Avec whiptail pour l'avoir en curses:

    whiptail --gauge "Avancement de la semaine:" 6 60 $(($(date +'%w')*100/7))
  • Avec Zenity pour l'avoir en mode GUI:

    zenity --progress --title='Avancement de la semaine:' --percentage=$(($(date +'%w')*100/7))

Être alerté quand le réseau saute.


while true; do
ping 8.8.8.8 -c1 -w1 >/dev/null || zenity --error --title "Connexion perdue" --text "Le reseau à sauté :$(date)";
sleep 1;
done

Créer une lookup table de sin/cos pour du C

Ça c'est du vieux code, mais, je m'en sert toujours, du coups je vous le met là.

export LC_NUMERIC="en_US.UTF-8" # use . instead of ,
# Increments between 0 ans 2pi
RESOLUTION=0.01
# Max value
MAX=1024

O=0;
STRING=""

for i in `seq 0 $RESOLUTION 1`;
	do N=$(echo "scale=5; b=$MAX/2; c($i*4*a(1)*2 )*b+b" | bc -l | cut -d"." -f1 );
	STRING=$(echo -e "$STRING$N,\t")
	O=$(($O+1))
done
# Remove last coma from the string list
CLEANSTRING=$(echo $STRING | sed 's/,\([^,]*\)$/ \1/')
# Output the code
echo "uint8_t COS[$O]={ $CLEANSTRING };" | fold -w80 -s

Un bargraph vertical

Parfois, je me lance dans des pseudo-UI en BASH pour certains de mes outils, que ce soit en monitoring, pentest, dataviz, ou autre... Et j'aime bien quand c'est joli.

Dans cet esprit, je vous présente une petite fonction qui permet d'afficher un bargraph vertical sur un caractère, en utilisant le charset standard:

function bargraph(){
  local BARS="▁▂▃▄▅▆▇█"
  local VALUE=$1
  local IN_MIN=$2
  local IN_MAX=$3
  local OUT_MIN=0
  local OUT_MAX=7
  CHARSET=$(( ( (${VALUE} - ${IN_MIN}) * (${OUT_MAX} - ${OUT_MIN}) + (${IN_MAX} - ${IN_MIN})/2 ) / (${IN_MAX} - ${IN_MIN}) + ${OUT_MIN} ))
  echo -n ${BARS:${CHARSET}:1}
}

exemple:

for i in `seq 0 5 100`; do
    echo -n $(bargraph $i 0 100)
  done

#resultat:
▁▁▂▂▂▃▃▃▄▄▅▅▅▆▆▆▇▇▇██
Ou encore:
for i in `seq 0 1 100`; do echo -n $( bargraph $(echo "(c($i/10))*99+100" | bc -l | cut -d"." -f1  ) 0 100); done

#resultat:
██▇▆▆▅▅▄▃▃▂▂▂▁▁▁▁▁▁▁▁▂▂▂▃▃▄▅▅▆▇▇███▇▆▆▅▄▄▃▃▂▂▂▁▁▁▁▁▁▁▁▂▂

hpphckng!