欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

shell進度條追蹤指令執(zhí)行時間的場景分析

 更新時間:2022年06月16日 10:41:26   作者:農(nóng)民工老王  
這篇文章主要介紹了shell進度條如何追蹤指令執(zhí)行時間,本文中的進度條可以應用于大部分場景。不用修改進度條函數(shù)的任何代碼,就可以直接使用,特別適合那些可預估指令執(zhí)行時間的場景,需要的朋友可以參考下

最近一兩年,我經(jīng)手了不少與shell相關的工作。在這個過程中,我越發(fā)覺得shell腳本在完成具體任務的同時,應該再給用戶展示一個進度條,用以提示當前階段還需要多少時間才能完成。

linux中的不少軟件都有進度條,比如yum的軟件安裝過程,docker的鏡像拉取過程。本想借鑒這些軟件的進度條的實現(xiàn)方法,但其開發(fā)語言大都不是shell,我就只好作罷。隨后,我在網(wǎng)上搜索shell進度條的實現(xiàn)方法,而找到的大都是用for或while循環(huán)在控制臺上直接打印等號或箭頭,并在循環(huán)體中用sleep命令實現(xiàn)一個固定的停頓,因而進度條完成的時間是固定的,而且在打印進度條時也沒有實現(xiàn)具體任務。那種進度條是完全沒有意義的。

于是,我就自己實現(xiàn)了一個shell進度條,測試表明實現(xiàn)了既定目標??梢宰粉欀噶畹膱?zhí)行時間。如果在預定用時之前完成,那么進度條會接到通知,然后立刻跑完剩余進度;如果指令的運行用時超出預定時間,那么進度條會在96%的地方等待指令跟上,然后再跑完剩余的4%。

本文中的進度條可以應用于大部分場景。不用修改進度條函數(shù)的任何代碼,就可以直接使用。特別適合那些可預估指令執(zhí)行時間的場景。對于如下載、文件復制等可以準確地計算出進度數(shù)值的情況,也可以基本滿足,還可以參考本文的思路,修改進度條函數(shù),進而顯示精確的進度數(shù)值。

代碼

代碼如下:

#!/bin/bash
progressBarTempPath=$(mktemp)
echo "0" >"$progressBarTempPath"
progressBar () {
  local time=$1
  local interval=1
  if [[ "${time}" == *"s" ]]; then
    interval=$(echo "scale=5;${time//s/}/60"|bc)
  elif [[ "${time}" == *"m" ]]; then
    interval=${time//m/}
  else
    echo "進度條參數(shù)錯誤"
    return 1
  fi
  local nowNum=1
  local str=''
  local postfix=('/' '-' '\' '|')
  while [ $nowNum -le 100 ]; do
    local needEnd=`cat "$progressBarTempPath"`
    local index=$((nowNum%4))
    printf "[%-50s %-3d%% %c]\r" "$str" "$nowNum" "${postfix[$index]}"
    nowNum=$((nowNum+1))
    if [ $needEnd -eq 1 ]; then
        sleep 0.1
    else
      if  [ $nowNum -le 20 ] ; then
          sleep  $interval
      elif [  $nowNum -gt 95  ];then
          local nowNumCopy=$nowNum
          while [ $needEnd -eq 0 ]; do
              sleep $interval
              local innerIndex=$(((nowNumCopy+1)%4))
              printf "[%-50s %-3d%% %c]\r" "$str" "$nowNum" "${postfix[$innerIndex]} "
              needEnd=$(cat "$progressBarTempPath")
              nowNumCopy=$((nowNumCopy+1))
          done
      else
          sleep $(echo "scale=5;${interval}/2"|bc)
      fi
    fi
    if (($nowNum % 2 == 0)); then
      str+='='
    fi
  done
  printf "\n"
}
# 多線程調(diào)用進度條函數(shù),參數(shù)表示預估的大概時間。參數(shù)中的s表示時間單位秒,還可以用m表分鐘。
progressBar 20s &
# 調(diào)用進度條后,就是完成具體操作的代碼。
echo "模擬一個24秒執(zhí)行完成的任務。"
sleep 24
# 通知進度條函數(shù)完成進度
echo "1" >"$progressBarTempPath"
wait

使用說明

使用非常簡單,按照以下兩步操作即可。

  • 將代碼中的第56、57行換成您實際需要執(zhí)行的命令。最好屏蔽其運行過程中的輸出。
  • 將代碼中第53行的方法調(diào)用參數(shù)20s換成你預估的實際時間。

效果展示

到此這篇關于shell進度條如何追蹤指令執(zhí)行時間的文章就介紹到這了,更多相關shell進度條追蹤指令執(zhí)行時間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 學習Linux網(wǎng)絡編程基本函數(shù)

    學習Linux網(wǎng)絡編程基本函數(shù)

    這篇文章主要介紹了學習Linux網(wǎng)絡編程,網(wǎng)絡編程的一些基本函數(shù):也是實現(xiàn)tcp協(xié)議通訊的基本步驟,實現(xiàn)代碼在最后,IP需要修改為自己的IP,即可通信
    2021-08-08
  • Shell腳本如何逐行處理文本文件

    Shell腳本如何逐行處理文本文件

    這篇文章主要給大家介紹了關于Shell腳本如何逐行處理文本文件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Django中shell命令的使用

    Django中shell命令的使用

    Django的manage工具提供了shell命令,本文主要介紹了Django中shell命令的使用,方便直接在終端中執(zhí)行測試python語句,有需要的小伙伴可以參考下
    2021-05-05
  • Linux 下xargs命令詳解及xargs與管道的區(qū)別

    Linux 下xargs命令詳解及xargs與管道的區(qū)別

    在工作中經(jīng)常會接觸到xargs命令,特別是在別人寫的腳本里面也經(jīng)常會遇到,但是卻很容易與管道搞混淆,本篇會詳細講解到底什么是xargs命令,為什么要用xargs命令以及與管道的區(qū)別,本文通過實例給大家詳解,需要的的朋友參考下
    2017-04-04
  • readelf命令讀取elf文件的詳細信息(推薦)

    readelf命令讀取elf文件的詳細信息(推薦)

    這篇文章主要介紹了readelf命令讀取elf文件的詳細信息,在這里使用一個elfDemo.rel作為示例,elfDemo.rel是elfDemo.c使用如下指令生成的,需要的朋友可以參考下
    2023-02-02
  • bash腳本中if語句的使用方法

    bash腳本中if語句的使用方法

    與大多數(shù)語言一樣,bash 有自己的條件形式。在使用時,要遵循以上格式;即,將 "if" 和 "then" 放在不同行,并使 "else" 和結(jié)束處必需的 "fi" 與它們水平對齊。這將使代碼易于閱讀和調(diào)試
    2014-05-05
  • shell腳本中一鍵部署zookeeper集群服務的方法

    shell腳本中一鍵部署zookeeper集群服務的方法

    Zookeeper是一個開源的分布式的,為分布式框架提供協(xié)調(diào)服務的Apache項目,這篇文章主要介紹了shell腳本一鍵部署zookeeper集群服務的方法,需要的朋友可以參考下
    2022-05-05
  • shell腳本無密碼登錄 expect的使用方法詳解

    shell腳本無密碼登錄 expect的使用方法詳解

    這篇文章主要介紹了shell腳本無密碼登錄 expect的使用方法詳解的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • linux shell之文件鎖

    linux shell之文件鎖

    經(jīng)常在 shell 腳本里要阻止其它進程,比如 msmtp 自帶的mail queue 腳本,這個腳本的互斥做法是不正確的,下面介紹下發(fā)現(xiàn)的三個通過文件達到互斥的正確做法
    2016-08-08
  • Shell腳本實現(xiàn)非法IP登陸自動報警

    Shell腳本實現(xiàn)非法IP登陸自動報警

    這篇文章主要介紹了Shell腳本實現(xiàn)非法IP登陸自動報警,本文實現(xiàn)非指定IP段登錄服務器時使用郵件報警,需要的朋友可以參考下
    2015-02-02

最新評論