Автор Тема: Поможите пож. написать shell script.  (Прочитано 1622 раз)

Оффлайн goshka

  • Участник
  • *
  • Сообщений: 114
Допустим, нужно написать скрипт визуализации прогресса проверки файловой системы (e2fsck) с помощью пакета "dialog."

e2fsck -С1 выдвет информацию в таком виде:
Напр:
Цитировать
. . .
4 56 62 /
4 57 62 /
4 58 62 /
4 59 62 /
4 60 62 /
4 61 62 /
4 62 62 /
Pass 5: Checking group summary information
5 0 124 /
5 1 124 /
5 2 124 /
5 3 124 /
. . .
Но вот с помощью каких средств разобрать выход программы e2fsck и подать их на вход программы dialog --gauge не понятно.

Надо, как я понимаю, выход этой программы обработать напр так:
Считать в некую переменную строку от начала строки до косой четры "/"
если первая цифра от e2fsck == 1, записать в некую переменную E2FSCK_PROGRESS=`expr 20 * 100 * вторая_цифра_в_столбике / третья_цифра_в_столбике`
если первая цифра от e2fsck == 1, записать в некую переменную E2FSCK_PROGRESS=`expr 40 * 100 * вторая_цифра_в_столбике / третья_цифра_в_столбике`
. . .
echo $E2FSCK_PROGRESS | dialog --title "проверка файловой системы"  --gauge             #по циклу, пока работает e2fsck


В простейшем случае, прогресс bar c шагом пять:
(while 1
 do
    sleep 1
    echo $PCT
    PCT=`expr $PCT + 5 `
    then
        echo 99
        sleep 1
        echo 100
        break
    fi
 done ) | $DIALOG --title "проверка файловой системы"  --gauge


Но вот с помощью каких средств разобрать выход программы e2fsck и подать их на вход программы dialog --gauge не понятно.  :(

Пропадаю.

Спасибо.

Оффлайн dubrsl

  • alt linux team
  • ***
  • Сообщений: 238
« Последнее редактирование: 24.12.2010 02:50:57 от dubrsl »
WBR,
Slava

Оффлайн dubrsl

  • alt linux team
  • ***
  • Сообщений: 238
Re: Поможите пож. написать shell script.
« Ответ #2 : 24.12.2010 03:56:03 »
#!/bin/bash                                                                                                                                                                                     
                                                                                                                                                                                               
LIMIT=60                                                                                                                                                                                       
dialog --screen-center --wrap --title "test" 0 0                                                                                                                                               
for ((a=1; a <= LIMIT ; a++)); do                                                                                                                                                               
echo "4 $a $LIMIT /"                                                                                                                                                                           
sleep 1                                                                                                                                                                                         
done |                                                                                                                                                                                         
while read line; do                                                                                                                                                                             
r1=$(echo $line |tr --squeeze-repeats ' '|cut -d ' ' -f2)                                                                                                                                       
r2=$(echo $line |tr --squeeze-repeats ' '|cut -d ' ' -f3)                                                                                                                                       
let "pr = (($r1 * 100) / $r2)"                                                                                                                                                                 
echo $pr | dialog --title "Progress" --no-close --gauge "Downloading ...\n\n" 0 80                                                                                                             
done
Первый цикл исключительно для генерации вывода e2fsck -С1
Обработку Pass 5 думаю доделаете сами.
WBR,
Slava