用进度条编写脚本

时间:2018-08-30 05:01:57

标签: bash

我知道这个问题已在该论坛上多次发布,并且我有多个使用进度条编写脚本的示例,但我的要求如下所示:

假设我有一个文件,其中几秒钟/分钟后会随机添加一些文本。现在,我知道将添加什么内容,就像我有一个文件/tmp/status_file

在这里我会每隔一段时间随机放置一次

echo "state1" >> /tmp/status_file
echo "state2" >> /tmp/status_file
echo "state3" >> /tmp/status_file
echo "state4" >> /tmp/status_file

我从 How to add a progress bar to a shell script?

但是我不确定如何仅在status_file中匹配某个模式并且匹配最后一个模式时才显示进度条。

我尝试了一个嵌套的“ for”循环,但没有成功

#!/bin/bash
# 1. Create ProgressBar function
# 1.1 Input is currentState($1) and totalState($2)
function ProgressBar {
# Process data
    let _progress=(${1}*100/${2}*100)/100
    let _done=(${_progress}*4)/10
    let _left=40-$_done
# Build progressbar string lengths
    _fill=$(printf "%${_done}s")
    _empty=$(printf "%${_left}s")

# 1.2 Build progressbar strings and print the ProgressBar line
# 1.2.1 Output example:
# 1.2.1.1 Progress : [########################################] 100%
printf "\rProgress : [${_fill// /#}${_empty// /-}] ${_progress}%%"

}

# Variables
_start=1

# This accounts as the "totalState" variable for the ProgressBar function
_end=100

_pattern="state1 state2 state3 state4"
for number in $(seq ${_start} ${_end});do
   for i in $_pattern; do
     sleep 1
     if grep -q $i /tmp/file;then
       ProgressBar ${number} ${_end}
     fi
  done
done

有什么建议吗?

0 个答案:

没有答案