2014-09-16 2 views
0

Сценарий run_tasks.bash прочитать текстовый файлдиалоговая панель баш + прогресс в Linux машине

Сценарий нужно читать построчно текстовый файл и выполнить сценарии в текстовом файле

One важное замечание о file.txt

Линии чисел в текстовом файле могут быть различными

Например на первом работающем лин эс в текстовый файл может быть 12

На втором бегущих строк в текстовом файле может быть, например, 213, и так далее .....

./run_tasks.bash /tmp/file.txt 

Пример текстового файла - file.txt

1 /tmp/run.sh 
2 /var/tmp/load_run.pl 
3 /etc/RT/LM.pl 
. 
. 

То, что я хочу сделать, это диалог отмечен прогресс в процессе, иллюстрирующее количество задач в текстовом файле

Например, если Numbe г задач (строк) в текстовый файл является 34 Затем диалог процесс начнется от 0% до 100% в соответствии с 34 задач

Или

Если количество задач (строки) в формате TXT являются 321, тогда диалогом процесса будет начинаться с 0% до 100% ссылки на 321 задачи

Другого дела диалога необходимо для просмотра каждого сценария губит в диалоговом

Пожалуйста, советы, как строить диалог кода согласно моим требованиям

Mean в то время как у меня есть следующий диалоговый код но я не понимаю, как можно подогнать этот код к различным задачам (строки) в текстовом файле

#!/bin/sh 
#A gauge Box example with dialog 
(
    c=10 
while [ $c -ne 110 ] 
    do 
    echo $c 
    echo "###" 
    echo "$c %" 
    echo "###" 
    ((c+=10)) 
     sleep 1 
done 
) | 
dialog --title "A Test Gauge With dialog" --gauge "Please wait ...." 10 60 0 

ответ

1

Это вопрос математики;) В items я вы поместите общее количество предметов, которые будете обрабатывать. Вероятно, вы хотите что-то вроде items=$(wc -l file.txt). Чтобы преобразовать количество обработанных строк в процент, я делаю $(($processed * 100/$items)). Обратите внимание на порядок, так как у нас есть только целые числа, обычные обработанные элементы * 100 не будут работать.

#!/bin/bash 

(
    items=123 
    processed=0 
    while [ $processed -le $items ]; do 
     pct=$(($processed * 100/$items)) 
     echo "XXX" 
     echo "Processing item $processed" 
     echo "XXX" 
     echo "$pct" 
     processed=$((processed+1)) 
     sleep 0.1 
    done 
) | dialog --title "Gauge" --gauge "Wait please..." 10 60 0 
Смежные вопросы