docs: add bash progress bar article
This commit is contained in:
parent
d73dd9d0fa
commit
97b9cb24ad
14 changed files with 1160 additions and 0 deletions
42
content/articles/2024/bash_printf/files/script4_progress.sh
Normal file
42
content/articles/2024/bash_printf/files/script4_progress.sh
Normal file
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env bash
|
||||
# shellcheck disable=2317
|
||||
PING_ITER=16
|
||||
PROGRESS_BAR_CHAR=(█ ▒)
|
||||
|
||||
command() {
|
||||
local -r host=${1?"first parameter must be an host"}
|
||||
local -r iteration=${2?"second parameter must be an iteration number"}
|
||||
local -r cmd=(ping -c "${iteration}" "${host}")
|
||||
|
||||
"${cmd[@]}"
|
||||
}
|
||||
|
||||
draw_progressbar() {
|
||||
local -r progress=${1?"progress is mandatory"}
|
||||
local -r total=${2?"total is mandatory"}
|
||||
local progress_segment
|
||||
local todo_segment
|
||||
|
||||
printf -v progress_segment "%${progress}s" ""
|
||||
printf -v todo_segment "%$((total - progress))s" ""
|
||||
printf >&2 "%s%s\r" \
|
||||
"${progress_segment// /${PROGRESS_BAR_CHAR[0]}}" \
|
||||
"${todo_segment// /${PROGRESS_BAR_CHAR[1]}}"
|
||||
|
||||
}
|
||||
|
||||
parse_output() {
|
||||
while read -r line; do
|
||||
if [[ "$line" =~ icmp_seq=([[:digit:]]{1,}).*time=(.*) ]]; then
|
||||
draw_progressbar "${BASH_REMATCH[1]}" "$PING_ITER"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
main() {
|
||||
command "aquilenet.fr" "$PING_ITER" > >(parse_output)
|
||||
}
|
||||
|
||||
main
|
||||
exit 0
|
||||
# [...]
|
Loading…
Add table
Add a link
Reference in a new issue