Прогресс-бары в терминале

Искусство написания bash скриптов. Делимся своими наработками
Ответить
Аватара пользователя
ZEN
Администратор
Сообщения: 1352
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

Прогресс-бары в терминале

Сообщение ZEN » 07 дек 2012, 00:19

Простой пример как создать вот такие:

Код: Выделить всё

zen@debian:~$ ./script.sh 
[####################==============================] 40%
zen@debian:~$ ./script.sh 
[##================================================] 4%
zen@debian:~$ ./script.sh 
[###############################################===] 95%
zen@debian:~$ ./script.sh 
[###################################===============] 70%
 
прогресс-бары bash-скриптом:

Код: Выделить всё

#!/bin/bash
VALUE=70 
POS=0
MAX=50
CUR=`echo "scale=1; $MAX/100*$VALUE" | bc | awk -F. '{print $1}'`
echo -n "["
while [[ $POS -lt $MAX ]]
do
    if [[ $POS -lt $CUR ]]
    then
        echo -n "#"
    else
        echo -n "="
    fi
    let POS+=1
done

echo "] $VALUE%"

exit 0; 
Здесь всё просто. Переменная MAX хранит длину (количество символов) прогресс-бара. Переменная VALUE - то самое количество процентов, которое мы хотим отобразить на прогресс-баре.
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Аватара пользователя
lumberjack
Модератор
Сообщения: 1009
Зарегистрирован: 30 сен 2012, 04:04
Темы: 152
Откуда: Сургут
Статус: Не в сети

Re: Прогресс-бары в терминале

Сообщение lumberjack » 11 дек 2012, 00:01

выкладываю результат кол. труда на основе вышеуказанного скрипта
1) вывод бара о свободном и занятом месте на разделе диска

Код: Выделить всё

#!/bin/bash 
TOTAL=`df -h | grep /dev/sda1 | awk '{print $2}' | sed -E '/G/s///' | sed 's/,/./g'`
USED=`df -h | grep /dev/sda1 | awk '{print $3}' | sed -E '/G/s///' | sed 's/,/./g'`
#echo "$TOTAL   $USED"

VALUE=`echo "scale=1; ($USED*1000)/($TOTAL*1000/100)"  | bc`

POS=0
MAX=57
CUR=`echo "scale=1; $MAX/100*$VALUE" | bc | awk -F. '{print $1}'`
echo -n "["
while [[ $POS -lt $MAX ]]
do
    if [[ $POS -lt $CUR ]]
    then
        echo -n "|"
    else
        echo -n " "
    fi
    let POS+=1
done

echo "]"

exit 0; 
2) вывод бара о текущей скорости исходящего трафика

Код: Выделить всё

#!/bin/bash 
RXB0=$(cat /sys/class/net/eth0/statistics/tx_bytes)
sleep 1
RXB1=$(cat /sys/class/net/eth0/statistics/tx_bytes)

RXDIFF=$(echo $((RXB1 - RXB0)) )
VALUE=`echo "scale=1; $RXDIFF/((200*1024)/100)"  | bc`
POS=0
MAX=30
CUR=`echo "scale=1; $MAX/100*$VALUE" | bc | awk -F. '{print $1}'`
echo -n "["
while [[ $POS -lt $MAX ]]
do
    if [[ $POS -lt $CUR ]]
    then
        echo -n "|"
    else
        echo -n " "
    fi
    let POS+=1
done

echo "]"

exit 0; 
в $RXDIFF/((200*1024)/100)" 200 -- ширина моего канала
единственное "НО": данный скрипт у меня в коньках не заработал

3) прогрессбар оперативной памяти

Код: Выделить всё

#!/bin/bash 
MEM_TOTAL=`free -m | sed -n '2p' |  awk '{print $2}'`
MEM_USED=`free -m | sed -n '3p' | awk '{print $3}'`

VALUE=`echo "$MEM_USED/($MEM_TOTAL/100)" | bc`
POS=0
MAX=57
CUR=`echo "scale=1; $MAX/100*$VALUE" | bc | awk -F. '{print $1}'`
echo -n "["
while [[ $POS -lt $MAX ]]
do
    if [[ $POS -lt $CUR ]]
    then
        echo -n "|"
    else
        echo -n " "
    fi
    let POS+=1
done

echo "]"

exit 0; 
4) прогрессбар плеера mocp

Код: Выделить всё

#!/bin/bash 
TOTAL_SEC=`mocp -Q %ts`
CURRENT_SEC=`mocp -Q %cs`

if [[ -z $CURRENT_SEC || -z $TOTAL_SEC ]]
then 
    TOTAL_SEC=59
    CURRENT_SEC=59
fi

VALUE=`echo "scale=2; $CURRENT_SEC/($TOTAL_SEC/100)" | bc | awk -F. '{print $1}'`
POS=0
MAX=59
CUR=`echo "scale=2; $MAX/100*$VALUE" | bc | awk -F. '{print $1}'`
echo -n "["

while 
let POS+=1
[[ $POS -lt $MAX ]]
do
    if [[ $POS -lt $CUR ]]
    then
        echo -n "|" 
    else
        echo -n " "
    fi
done

#echo "] $VALUE%"
echo "]"
exit 0; 
основной вклад в скрипты вложил ZEN, за что ему персональное СПАСИБО )
от себя могу добавить, что теперь я хоть знаю, как это работает)

а так сие выглядит:
Изображение Изображение

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей