linux机器中的bash +进度对话栏

时间:2014-09-16 13:27:00

标签: linux bash shell dialog

脚本 run_tasks.bash 读取文本文件

脚本需要逐行读取文本文件并执行文本文件中的脚本

关于file.txt的一个重要评论

txt文件中的行号可能不同

例如,在txt文件中的第一个运行行可能是12

在txt文件中的第二个运行行可以是例如213,依此类推......

   ./run_tasks.bash   /tmp/file.txt

文本文件示例 - file.txt

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

我想要做的是流程对话框进度,它说明了txt文件中的任务数量

例如,如果txt文件中的任务(行)数为34 然后,根据34个任务

,对话过程将从0%开始到100%

或者

如果txt中的任务(行)数为321,那么对话过程将从0%到100%开始参考321任务

对话框需要另外查看对话框中的每个破坏脚本

请根据我的要求建议如何构建对话框代码

平均而我有以下对话框代码我不明白如何将此代码放入txt文件中的不同任务(行)

 #!/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 个答案:

答案 0 :(得分:2)

这是一个数学问题;)在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