shell腳本實現多彩進度條

自己寫的小腳本中如果有耗時操作業(yè)務,比如網絡請求,文件處理,就要考慮一下加入一個進度條來提升體驗。

實現一個進度條需要解決的一些技術點:

  • 如何在同一行實現定時刷新
    1. 定時打印使用while循環(huán)觸發(fā),代碼中sleep線程休眠和i++自增長模擬,實際使用中應該封裝進度值的set方法由外部控制進度。
    2. 使用格式化打印\r,保證每一次渲染都在同一行進行
  • 如何實現終端的彩色打印

    1.使用prinf或者echo -e進行格式化打印,打印字符串由類似\e[30;47m開始和\e[0m結尾。設置中\e[為固定格式,0m表示為終端默認樣式,自定義樣式用兩位十位數標記,用;分隔,其中十位為3表示設置前景色,十位為4表示設置背景色,個位數字的意義如下表。
    2.開啟定時循環(huán),設置樣式個位使用i%8即可動態(tài)調整輸出字符顏色。

0 1 2 3 4 5 6 7
black red green yellow blue purple cyan white
  • loading效果

同一位置定時順序打印"|" "/" "-" "\\",其中反斜杠\必須寫成\\;同理,進度條百分號%必須寫成%%

  • 如何讓進度值顯示在進度條中間
    1.先拼好整體打印字符串,把進度值夾在前后的空格之中。
    2.使用"${totalstr:0:$i+1}"截取高亮部分,使"${totalstr:$i+1}"截取背景部分,再重新組合。

實現效果1

progress.gif
#!/bin/bash

#隱藏光標
printf "\e[?25l" 

i=0;
str=""
arr=("|" "/" "-" "\\")
while [ $i -le 100 ]
do
  let index=i%4
  let indexcolor=i%8
  let color=30+indexcolor
  #打印進度
  printf "\r\e[0;$color;1m[%-100s][%d%%]%c\e[0m" "$str" "$i" "${arr[$index]}"
  sleep 0.1
  let i++
  str+='='
done

#顯示光標
printf "\e[?25h""\n"

實現效果2

white_progress.gif
#!/bin/bash

#隱藏光標
printf "\e[?25l" 

i=0;
str=""
bgcolor=43
space48="                                                "

while [ $i -le 100 ]
do
  percentstr=$(printf "%3s" $i)
  totalstr="${space48}${percentstr}${space48}"
  leadingstr="${totalstr:0:$i+1}"
  trailingstr="${totalstr:$i+1}"
  #打印進度
  printf "\r\e[30;47m${leadingstr}\e[37;40m${trailingstr}\e[0m"
  sleep 0.05
  let i++
  str+="="
done

#顯示光標
printf "\e[?25h""\n"

參考文章:

shell腳本實現多彩進度條
shell隱藏顯示光標
shell打印顏色

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容